MongoDB:如果MapReduce设置为非原子,新写入的数据会发生什么?

时间:2014-12-11 00:04:57

标签: mongodb mapreduce schema atomic

我打算按如下方式构建应用程序:

  • 节点服务器从移动设备接收日志,并在它们到来时插入Mongo。
  • 运行增量MapReduce作业以根据数据计算新字段。
  • 然后按分钟,小时,天等预先汇总数据
  • 一直以来,mongo中的数据都是由前端可视化应用程序查询的。

我有几个问题:

  • 如果我将nonAtomic标志设置为true,那么当MapReduce作业运行时,如果将新数据写入数据库会发生什么?
    • 是否写入数据库?如果是这样,我假设这些数据不会包含在当前的增量MapReduce作业中。
    • 或者,数据库已锁定且写入是否丢失?
  • 当MapReduce作业然后运行时间聚合时,数据库中已有的现有数据是否可以提供给我的前端?

谢谢!

1 个答案:

答案 0 :(得分:1)

以下描述了MongoDB 2.6。 nonAtomic是map / reduce的out部分的选项。它与map / reduce如何从源集合中提取文档无关,只与它如何将文档输出到目标集合有关。

Map / reduce使用光标覆盖输入文档(从querysortlimit创建),因此游标规则适用于要映射/缩小的输入文档。 / p>

nonAtomicfalse时,在map / reduce的out阶段,输出数据库被锁定,因此对该数据库的写入必须等待,并且可能需要时间在客户端失败。

如果nonAtomictrue,当map / reduce的out阶段正在运行时,数据可以从数据库中读取并提供给前端,但是因为读取可以与map / reduce的输出交错,所服务的数据可能处于中间状态。