查询MongoDB服务器有多个
一致性规则。在mgo
中,SetMode
对象的Session
更改了 session 的一致性模式。三种类型
可用的一致性模式有:最终,单调和强。
例如
session, err := mgo.Dial("localhost")
if err != nil {
panic(err)
}
defer session.Close()
//Switch the session to a monotonic behavior.
session.SetMode(mgo.Monotonic, true)
我正在阅读https://en.wikipedia.org/wiki/Consistency_model中的不同一致性模型
但是
mgo
中使用的三个模型之间的关系是什么?Strong
暗示Eventual
和Eventual
暗示Monotonic
是否正确?谢谢。
最佳答案
以下是MongoDB声称支持的三种一致性模型:
根据这些定义,Strong表示最终的,而Strong表示单调,但是最终的一致性和单调的读取之间没有关系。
但是,从实际系统来看,还有更多发现。
在MongoDB中,单调模式意味着客户端打开与某个辅助节点的单个连接。所有读取都通过此连接进行。发生写操作时,客户端将断开连接并连接到主节点,然后执行写操作。写入后的读取是从主节点执行的。
在“最终”模式下,同时从多个辅助节点进行读取。这意味着,当更新到达不同的节点时,我们可能会看到它们乱序。针对主数据库执行写入操作,但可能会在多个并发连接中执行写入操作。这意味着写入也可能会乱序到达。从文档中尚不清楚,第一次写入后的读取是否全部由主要服务器提供,例如在单调模式下,还是继续由次要服务器提供。 The source code告诉我们,次要的继续阅读。
// Switch over a Monotonic session to the master.
if !slaveOk && s.consistency == Monotonic {
s.slaveOk = false
}
因此,对于Mgo v2, Strong表示单调,表示最终。
关于mongodb - 比较mgo中使用的一致性模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38572332/