面试题答案
一键面试读写关注级别majority和local的区别
- majority:
- 写关注:当使用
majority
写关注时,MongoDB会等待大多数副本集成员确认写入操作成功后,才向客户端返回成功响应。这确保了数据在大多数节点上持久化,提供了较高的数据一致性。例如,在一个具有5个副本集成员的集群中,需要3个成员确认写入才能成功返回。 - 读关注:使用
majority
读关注时,读操作会从具有大多数投票权的节点读取数据,这保证了读取到的数据是最新提交的,因为大多数节点上的数据是一致的。
- 写关注:当使用
- local:
- 写关注:
local
写关注只要求写入操作在本地节点成功即可返回,不等待其他副本集成员的确认。这使得写入操作非常快,但可能存在数据丢失风险,如果本地节点在数据复制到其他节点之前发生故障。 - 读关注:
local
读关注从本地节点读取数据,它不保证读取到的数据是最新的,可能会读取到旧版本的数据,因为本地节点的数据可能还没有与其他节点同步。
- 写关注:
在简单事务场景中的使用场景
- 适合使用majority的场景:
- 当数据一致性至关重要,不允许读取到旧数据时,例如涉及金融交易的事务。在银行转账事务中,从一个账户扣除金额并增加到另一个账户,使用
majority
写关注确保数据在大多数节点持久化,majority
读关注保证读取到的账户余额是最新的,避免出现重复扣款或余额不一致问题。 - 当事务涉及关键业务数据,并且应用程序需要确保数据已在多数节点保存,以防止数据丢失时,如订单处理系统,使用
majority
级别可以保证订单数据的完整性和一致性。
- 当数据一致性至关重要,不允许读取到旧数据时,例如涉及金融交易的事务。在银行转账事务中,从一个账户扣除金额并增加到另一个账户,使用
- 适合使用local的场景:
- 当事务对写入速度要求极高,并且可以容忍一定程度的数据不一致和潜在的数据丢失风险时,例如一些日志记录场景。在记录用户操作日志时,使用
local
写关注可以快速记录日志,即使本地节点故障导致部分日志丢失,对整体业务影响相对较小。 - 当读取操作不需要强一致性,并且应用程序更关注读取性能时,如一些分析类的简单事务,只需要快速获取大致数据,
local
读关注可以从本地节点快速读取数据,提高读取效率。
- 当事务对写入速度要求极高,并且可以容忍一定程度的数据不一致和潜在的数据丢失风险时,例如一些日志记录场景。在记录用户操作日志时,使用