【发布时间】:2014-08-18 17:09:33
【问题描述】:
在默认的“已确认”写入关注模式下使用 MongoDB(通过 PyMongo),如果我有一行写入数据库(例如,输出新集合的 mapReduce)后跟一行读取从数据库中,读取总是会看到写入的变化?
此外,对于所有比“已确认”更严格的写入关注点,即“已记录”和“已确认副本”,上述内容是否正确,但在“未确认”的情况下不正确?
【问题讨论】:
-
Map reduce 是一个不好的例子,因为它以原子方式写入输出集合
-
@Sammaye - 是的,但是考虑到“已确认”的写入问题,mapReduce 的(原子)写入是否总是发生在读取发生之前?更新的情况是否有所不同?
-
不,这取决于,MongoDB 不知道您的读取正在等待该 MR,因此它将读取您查询时的内容,它不会等待有关写入的操作完成,除非它是单个文档,因为在 MongoDB 中每个文档都存在事务
-
@Sammaye - 好的,在这种情况下,给定第 1 行的写入和第 2 行的读取,我如何确保第 2 行看到第 1 行的写入?
-
在同一个脚本中?如果我记得正确的 python 是同步的(与 JS 不同),它应该可以在公认的情况下工作,对不起,我没有意识到你在谈论一个程序脚本