【问题标题】:MongoDB: If MapReduce is set to non atomic, what happens to newly written data?MongoDB:如果 MapReduce 设置为非原子,那么新写入的数据会怎样?
【发布时间】:2014-12-11 00:04:57
【问题描述】:
我计划构建一个应用程序如下:
- 节点服务器从移动设备接收日志,并在它们到来时插入到 Mongo。
- 运行增量 MapReduce 作业以根据数据计算新字段。
- 然后按分钟、小时、天等预先汇总数据。
- 一直以来,mongo 中的数据都是由前端可视化应用程序查询的。
我有几个问题:
- 如果我将 nonAtomic 标志设置为 true,如果在 MapReduce 作业运行时将新数据写入数据库会发生什么情况?
- 是否写入数据库?如果是这样,我假设这些数据不会包含在当前的增量 MapReduce 作业中。
- 或者,是数据库被锁定,写入丢失了?
- 随着 MapReduce 作业和时间聚合的运行,是否可以将数据库中已有的现有数据提供给我的前端?
谢谢!
【问题讨论】:
标签:
mongodb
mapreduce
schema
atomic
【解决方案1】:
下面介绍 MongoDB 2.6。 nonAtomic 是 map/reduce 的 out 部分的一个选项。它与 map/reduce 如何从源集合中摄取文档无关,只与它如何将文档输出到目标集合有关。
Map/reduce 在输入文档(从query、sort、limit 创建)上使用光标,因此光标规则适用于要映射/缩减的输入文档。
当nonAtomic 为false 时,在map/reduce 的out 阶段,输出数据库被锁定,因此对该数据库的写入将不得不等待,并且可能由于客户端故障而超时.
如果nonAtomic 是true,当map/reduce 的out 阶段正在运行时,可以从数据库中读取数据并提供给前端,但是由于读取可以与来自的输出交错map/reduce,服务的数据可能处于中间状态。