MST

星途 面试题库

面试题:MongoDB事务读写关注级别基础配置

在MongoDB中,简述读写关注级别majority和local的区别,并且说明在一个简单的事务场景中,何时适合使用majority,何时适合使用local?
16.2万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

读写关注级别majority和local的区别

  1. majority
    • 写关注:当使用majority写关注时,MongoDB会等待大多数副本集成员确认写入操作成功后,才向客户端返回成功响应。这确保了数据在大多数节点上持久化,提供了较高的数据一致性。例如,在一个具有5个副本集成员的集群中,需要3个成员确认写入才能成功返回。
    • 读关注:使用majority读关注时,读操作会从具有大多数投票权的节点读取数据,这保证了读取到的数据是最新提交的,因为大多数节点上的数据是一致的。
  2. local
    • 写关注local写关注只要求写入操作在本地节点成功即可返回,不等待其他副本集成员的确认。这使得写入操作非常快,但可能存在数据丢失风险,如果本地节点在数据复制到其他节点之前发生故障。
    • 读关注local读关注从本地节点读取数据,它不保证读取到的数据是最新的,可能会读取到旧版本的数据,因为本地节点的数据可能还没有与其他节点同步。

在简单事务场景中的使用场景

  1. 适合使用majority的场景
    • 当数据一致性至关重要,不允许读取到旧数据时,例如涉及金融交易的事务。在银行转账事务中,从一个账户扣除金额并增加到另一个账户,使用majority写关注确保数据在大多数节点持久化,majority读关注保证读取到的账户余额是最新的,避免出现重复扣款或余额不一致问题。
    • 当事务涉及关键业务数据,并且应用程序需要确保数据已在多数节点保存,以防止数据丢失时,如订单处理系统,使用majority级别可以保证订单数据的完整性和一致性。
  2. 适合使用local的场景
    • 当事务对写入速度要求极高,并且可以容忍一定程度的数据不一致和潜在的数据丢失风险时,例如一些日志记录场景。在记录用户操作日志时,使用local写关注可以快速记录日志,即使本地节点故障导致部分日志丢失,对整体业务影响相对较小。
    • 当读取操作不需要强一致性,并且应用程序更关注读取性能时,如一些分析类的简单事务,只需要快速获取大致数据,local读关注可以从本地节点快速读取数据,提高读取效率。