Abd*_* Pp 9 asynchronous tornado eventual-consistency mongodb pymongo
首先,这是Pymongo文档中的内容
默认情况下,当线程首次在MongoDB上运行操作时,PyMongo会为每个线程启动一个请求.这保证了**读写一致性.在请求中,线程将继续独占使用相同的套接字,并且没有其他线程将使用此套接字,直到线程调用end_request()或它终止.此时,套接字将返回到连接池以供其他线程使用.
所以当对Mongodb使用异步库(比如Asyncmongo,Motor)时,用户是否会像阻塞调用或最终一致性那样具有一致性?
关于这个问题有几点意见.
除非您使用(或更高版本)或使用写入"safe=true"
,否则不保证您具有读写后一致性.您可以将这些包含在insert()或命令中,也可以用于为您正在使用的连接,数据库或集合设置这些选项."w=1"
"j=true"
update()
set_lasterror_options()
如果您允许从辅助节点读取(例如,除了PRIMARY之外的ReadPreference),那么您将不会获得写后读取语义,而只会获得最终的一致性.
如果您正在使用PRIMARY的ReadPreference并且您正在设置相应的lasterror选项,那么您将保证在使用相同套接字的所有操作(即相同的线程)上获得写后读写语义.
如果您正在使用多个线程,并且您没有从辅助节点读取,那么只要您在第一个线程中写入完成后在第二个线程中发出读取,就可以保证获得写后读写一致性.您可以使用标准线程同步原语来确保这一点.
归档时间: |
|
查看次数: |
4459 次 |
最近记录: |