了解你自己 - 写在MongoDB中的一致性(Read-your-own-writes consis

2019-07-31 19:43发布

首先,这里是什么,是在说Pymongo文档

默认情况下,PyMongo当线程首先运行于MongoDB的动作开始为每个线程的请求。 这保证**读你-写入数据的一致性 。 在请求时,该线程将继续独家使用相同的插槽,并没有其他的线程将使用这个插座,直到线程调用END_REQUEST(),或者终止。 在这一点上,插座就返回到其他线程使用连接池。

因此,使用一个异步库的MongoDB时(如Asyncmongo,马达),将在用户有像在阻塞调用或最终一致性一致性?

Answer 1:

有几个关于这个问题点。

  1. 你不能保证已读后写的,除非您使用的是一致"safe=true""w=1" (或更高版本)或"j=true"与你写。 您可以包括这些作为插入()或部分update()命令,或者使用set_lasterror_options()设置这些选项进行连接,数据库或集合,您正在使用。

  2. 如果你允许从辅助节点读取(例如比主以外的ReadPreference),那么你就不会得到读后写语义,但只有最终一致性。

  3. 如果您正在使用PRIMARY的ReadPreference和你设置适当的lasterror选项,那么你保证得到在使用相同套接字的所有操作读 - 写后的语义,也就是在同一个线程。

  4. 如果你使用多线程,你是不是从辅助节点读取,那么你保证得到读后写,只要一致性您在第二个线程发出读取在第一线程写入完成后。 您可以使用标准的线程同步原语,以确保这一点。



Answer 2:

我是电机的作者,我知道一点AsyncMongo了。 下面是汽车的有关安全写入文件:

http://emptysquare.net/motor/pymongo/api/motor/differences.html#acknowledged-writes

简短的回答:你在回调执行插入(无论代码),更新(),等等,如果这些插入或更新是安全的 ,会看到MongoDB中的数据已经应用了更改 。 MongoDB的应用了变化之前或之后,你不能在这样的回调执行任何代码可以运行。



文章来源: Read-your-own-writes consistency in Mongodb