在Mongodb中读取您自己的写入一致性
首先,这里是在 默认情况下,PyMongo在每个线程第一次在MongoDB上运行操作时启动对该线程的请求。这保证了读写一致性。在一个请求中,线程将继续以独占方式使用同一套接字,并且在线程调用end_request()或终止之前,其他线程不会使用此套接字。此时,套接字将返回到连接池供其他线程使用在Mongodb中读取您自己的写入一致性,mongodb,asynchronous,tornado,pymongo,eventual-consistency,Mongodb,Asynchronous,Tornado,Pymongo,Eventual Consistency,首先,这里是在 默认情况下,PyMongo在每个线程第一次在MongoDB上运行操作时启动对该线程的请求。这保证了读写一致性。在一个请求中,线程将继续以独占方式使用同一套接字,并且在线程调用end_request()或终止之前,其他线程不会使用此套接字。此时,套接字将返回到连接池供其他线程使用 因此,在使用异步库进行Mongodb(如Asyncmongo、Motor)时,用户会像阻塞调用一样保持一致性还是最终保持一致性?关于这个问题有几点 除非您在写操作中使用了“safe=true”、“w=1”
因此,在使用异步库进行Mongodb(如Asyncmongo、Motor)时,用户会像阻塞调用一样保持一致性还是最终保持一致性?关于这个问题有几点
“safe=true”
、“w=1”
(或更高版本)或“j=true”
,否则不能保证具有写后读一致性。您可以在insert()或update()
命令中包含这些选项,或者使用set\u lasterror\u options()
为正在使用的连接、数据库或集合设置这些选项我是Motor的作者,对AsyncMongo也有一点了解。以下是有关安全写入的电机文件:
简短回答:无论您在insert()、update()等回调中执行什么代码,如果这些插入或更新是安全的,都将在应用更改后在MongoDB中看到数据。任何不在此类回调中执行的代码都可能在MongoDB应用更改之前或之后运行。我认为您给出了所有的可能性:我将MongoDB与tornado一起使用,而在tornado中,它是一个事件循环,因此获取线程很困难,那么异步库(不使用线程)呢。。。这取决于您使用的异步库。同样的规则也适用:只有在getLastError()命令成功返回后,才能保证读取您编写的内容。一旦从getLastError()成功返回,那么任何启动find()的线程都将看到写入的数据。线程之间的同步留给读者作为练习。我认为这是答案,因为它是以一般方式说的,所以我只想看看Motor或Asyncmongo是如何工作的:D谢谢你,Againor Motor,你需要一个回调函数,一旦回调函数无误地完成,您将能够读取您编写的内容。我开始学习异步调用,所以这就是为什么我问这个问题,给我更多的“能量”来学习它,你给了我很多:D再次感谢你谢谢你:D顺便说一句,Motor将使用所有pymongo查询,除了使用异步方式?正确,这就是目的。=)