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



我计划按如下方式构建一个应用程序:

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

我有几个顾虑:

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

谢谢!

下面介绍 MongoDB 2.6。 nonAtomic是映射/减少的out部分的一个选项。它与 map/reduce 如何从源集合引入文档无关,只与它将文档输出到目标集合无关。

Map/reduce使用光标在输入文档(从querysortlimit创建)上,因此光标规则适用于要映射/减少的输入文档。

nonAtomic false时,在map/reduce的out阶段,输出数据库被锁定,因此对该数据库的写入将不得不等待,并且可能会因客户端上的故障而超时。

如果nonAtomic true,当map/reduce的out阶段正在运行时,可以从数据库中读取数据并将其提供给前端,但由于读取可以与map/reduce的输出交错,因此提供的数据可能处于中间状态。

相关内容

  • 没有找到相关文章

最新更新