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
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