Tim*_*Tim 5 distributed go mongodb mgo
使用多个一致性规则查询MongoDB服务器.在mgo,SetMode所述的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)
Run Code Online (Sandbox Code Playgroud)
我正在阅读https://en.wikipedia.org/wiki/Consistency_model中的不同一致性模型
但是这三种模型之间的关系是mgo什么?
是否正确Strong暗示Eventual并Eventual暗示Monotonic?
谢谢.
这些是MongoDB声称支持的三种一致性模型:
强一致性:所有并行进程(或节点,处理器等)以相同顺序(顺序)查看所有访问.
单调读取:如果进程读取数据项x的值,则该进程对x的任何连续读取操作将始终返回相同的值或更新的值.
最终一致性:如果没有对给定数据项进行新更新,则最终对该项的所有访问都将返回上次更新的值.
通过这些定义,强意味着最终,而强意味着单调,但最终一致性和单调读取之间没有关系.
然而,看看真实的系统,还有更多的东西可以找到.
在MongoDB中,Monotonic模式意味着客户端打开与某个辅助节点的单个连接.所有读取都通过此连接发生.发生写入时,客户端断开连接并连接到主节点,然后执行写入.从主节点执行写入后的读取.
在最终模式中,同时从多个辅助节点完成读取.这意味着当我们到达不同的节点时,我们可能会看到无序更新.写入是针对主要进行的,但可能是多个并发连接.这意味着写入也可能无序到达.从文档中不清楚第一次写入后的读取是否全部由主要服务器提供,如单调模式,或者它们是否继续由辅助服务器提供服务.但是,源代码告诉我们读取继续由辅助服务器提供.
// Switch over a Monotonic session to the master.
if !slaveOk && s.consistency == Monotonic {
s.slaveOk = false
}
Run Code Online (Sandbox Code Playgroud)
因此,对于Mgo v2,Strong意味着Monotonic意味着最终.
| 归档时间: |
|
| 查看次数: |
1502 次 |
| 最近记录: |