Mongodb:可用性与一致性

Mongodb: availability vs consistency

MongoDB遵循主从架构。数据写入主节点,然后复制到从节点。 Mongo 据说在可用性上提供一致性,考虑一下,差异可以解释为:

当 master 宕机时,slave 节点必须决定选择哪个作为 master,这需要时间,因此系统在那段时间不可用 window。

另一个原因可能是:在复制过程中,节点被锁定,以便将数据复制到所有从机以实现高一致性,如果我们使用从机进行读取,则锁定意味着不可用。

但是这可能会因配置而异,因为 Mongo 允许配置从属角色。我们可以将它们仅用于副本目的(在这种情况下,可能不需要从属锁定,因为读取请求仅由主机提供服务并且复制可以异步发生)或者我们也可以让从属用于读取操作(在这种情况下,锁定可能发生写入时需要这样才能保持一致性)。

所以我看到有很多可能的变化。

那么我们是否有定义所有这些的基本规则?

MongoDB 允许您根据用例要求自定义 CAP-theorem 行为,您可以通过以下设置调整 consistency/availability/performance:

read-preference 可能的值:

  ["primary","primaryPreferred","secondary","secondaryPreferred","nearest"]

write-concern 可能的值:

  ["majority",0,1,2,n]

read-concern 可能的值:

  ["local","available","majority","linearizable","snapshot"]

journaling 可能的值:

  ["true","false"]

另外这个问题之前已经详细讨论过here