我正在阅读mongdb的文档,并且在尝试引入Mongo 3.6的因果一致性会话之前,我想了解什么是“读自己的写”一致性所必需的。
根据此页面:https://docs.mongodb.com/manual/reference/read-concern-majority/#read-your-own-writes
在MongoDB 3.6之前,您必须使用{w:“ majority”}发出您的写操作,然后对读取操作使用“ majority”或“ linearizable”读取关注,以确保单个线程可以读取自己写。
但是,在他们在上述同一页面(https://docs.mongodb.com/manual/reference/read-concern-majority/#example)上提供的示例中,似乎有一些与此不同的信息。具体来说,它们有一个图表(我在下面复制了该图表):
在该图中,在时间t3处,写入被确认。在收到写入确认后,在第4时刻majority
读取对任何一个辅助节点的关注将返回旧值,这与第一个主张“只要一个线程可以读取其自身的写入”相矛盾。 majority
写+阅读问题。
如果将声明修改为“从主要或线性化问题的主要问题中读到的”,我认为这将成为事实……但是,我想知道我是否误解了。
有人可以提供以下方面的见识吗?
a)本文档的含义,以及
b)如何在3.6的因果会话之前获取自己的写语义?
谢谢!
答案 0 :(得分:-1)
当我要提出与您完全相同的问题时,我找到了您的票。 我认为MongoDB文档中的这一说法不正确。没有因果一致性会话的双重“多数”不能保证“读自己写”的语义。 据我了解,在3.6版之前,线性读关注可以为大多数写关注提供这种语义。