MST
星途 面试题库

面试题:MongoDB读关注与集群级别持久性 - 中等难度

在MongoDB中,简述读关注(read concern)的不同级别,以及它们如何与集群级别的持久性保证相关联?例如,Local读关注级别在集群持久性方面意味着什么?
41.7万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

读关注级别

  1. Local
    • 含义:读取从本地节点返回的最新数据,不保证数据已经复制到其他节点。这意味着从当前操作的节点读取数据,而不管这些数据是否已经同步到其他副本集成员。
    • 与集群持久性关联:Local读关注级别不关心数据在集群中的持久性。即使数据尚未传播到其他节点,该节点上的数据也会被读取。例如,在副本集中主节点上写入数据后,立即使用Local读关注在主节点读取,可以读到新写入的数据,即使这些数据还未被复制到从节点。
  2. Available
    • 含义:读取任何可用节点上的数据,不考虑数据的一致性或持久性。这个级别适用于读取可能陈旧但仍然可用的数据的场景,例如在网络分区等情况下,即使部分节点的数据可能不是最新的,也能读取。
    • 与集群持久性关联:不依赖于集群的持久性保证。它更侧重于在各种情况下(包括节点故障、网络问题等)能够获取到数据,而不关心数据是否是最新的或已经持久化到足够多的节点。
  3. Primary
    • 含义:只从主节点读取数据,确保读取到最新提交的数据。因为主节点是接收写入操作并协调复制的节点,从主节点读取能保证获取到集群中最新的已提交数据。
    • 与集群持久性关联:依赖于主节点的持久性。主节点在接收到写入操作并将其持久化到磁盘(根据其自身的持久性配置,如journaling等)后,从主节点读取就可以获取到最新的数据。但是,如果主节点发生故障且数据尚未完全复制到从节点,可能会导致数据丢失,此时使用Primary读关注就无法读取到丢失的数据。
  4. PrimaryPreferred
    • 含义:优先从主节点读取数据,但如果主节点不可用,则从从节点读取。这样在主节点正常时能保证读取到最新数据,主节点故障时也能从从节点获取数据(尽管可能不是最新的)。
    • 与集群持久性关联:当从主节点读取时,依赖主节点的持久性保证;当主节点不可用从从节点读取时,数据的持久性取决于从节点与主节点的同步情况。如果从节点同步延迟,读取到的数据可能不是最新的已持久化数据。
  5. Secondary
    • 含义:只从从节点读取数据。这适用于对读取性能要求较高,对数据实时性要求不高的场景,因为从节点可以分担读负载。
    • 与集群持久性关联:依赖于从节点与主节点的同步程度。从节点通过复制主节点的数据来保持一致性,但由于网络延迟等原因,从节点的数据可能滞后于主节点。所以从从节点读取的数据可能不是最新的已持久化数据,数据的持久性取决于从节点成功复制并持久化主节点数据的情况。
  6. SecondaryPreferred
    • 含义:优先从从节点读取数据,但如果所有从节点都不可用,则从主节点读取。这样可以尽量利用从节点分担读负载,同时在从节点不可用时仍能获取数据。
    • 与集群持久性关联:当从从节点读取时,数据持久性依赖于从节点与主节点的同步情况;当从主节点读取时,依赖主节点的持久性保证。
  7. Majority
    • 含义:读取的数据已被复制到大多数节点(超过一半的副本集成员)。这提供了较高的数据一致性和持久性保证,因为只有当数据被复制到大多数节点后才会被读取。
    • 与集群持久性关联:与集群的多数节点持久性紧密相关。MongoDB通过确保数据被写入到大多数节点来保证数据的持久性。使用Majority读关注级别,只有当数据在大多数节点上持久化后才能被读取,降低了数据丢失的风险。例如,在一个包含5个节点的副本集中,至少3个节点成功持久化数据后,才能通过Majority读关注读取到该数据。