首先,这里是什么,是在说Pymongo文档
默认情况下,PyMongo当线程首先运行于MongoDB的动作开始为每个线程的请求。 这保证**读你-写入数据的一致性 。 在请求时,该线程将继续独家使用相同的插槽,并没有其他的线程将使用这个插座,直到线程调用END_REQUEST(),或者终止。 在这一点上,插座就返回到其他线程使用连接池。
因此,使用一个异步库的MongoDB时(如Asyncmongo,马达),将在用户有像在阻塞调用或最终一致性一致性?
首先,这里是什么,是在说Pymongo文档
默认情况下,PyMongo当线程首先运行于MongoDB的动作开始为每个线程的请求。 这保证**读你-写入数据的一致性 。 在请求时,该线程将继续独家使用相同的插槽,并没有其他的线程将使用这个插座,直到线程调用END_REQUEST(),或者终止。 在这一点上,插座就返回到其他线程使用连接池。
因此,使用一个异步库的MongoDB时(如Asyncmongo,马达),将在用户有像在阻塞调用或最终一致性一致性?
有几个关于这个问题点。
你不能保证已读后写的,除非您使用的是一致"safe=true"
, "w=1"
(或更高版本)或"j=true"
与你写。 您可以包括这些作为插入()或部分update()
命令,或者使用set_lasterror_options()
设置这些选项进行连接,数据库或集合,您正在使用。
如果你允许从辅助节点读取(例如比主以外的ReadPreference),那么你就不会得到读后写语义,但只有最终一致性。
如果您正在使用PRIMARY的ReadPreference和你设置适当的lasterror选项,那么你保证得到在使用相同套接字的所有操作读 - 写后的语义,也就是在同一个线程。
如果你使用多线程,你是不是从辅助节点读取,那么你保证得到读后写,只要一致性您在第二个线程发出读取在第一线程写入完成后。 您可以使用标准的线程同步原语,以确保这一点。
我是电机的作者,我知道一点AsyncMongo了。 下面是汽车的有关安全写入文件:
http://emptysquare.net/motor/pymongo/api/motor/differences.html#acknowledged-writes
简短的回答:你在回调执行插入(无论代码),更新(),等等,如果这些插入或更新是安全的 ,会看到MongoDB中的数据已经应用了更改后 。 MongoDB的应用了变化之前或之后,你不能在这样的回调执行任何代码可以运行。