什么时候map/reduce在MongoDB中实际触发替换?
问题描述:
据在http://www.mongodb.org/display/DOCS/MapReduce,使用替换出指令时的文档,什么时候map/reduce在MongoDB中实际触发替换?
输出将被插入到一个集合,将原子具有相同名称替换现有的集合。
这是否意味着当M/R进程正在运行时数据被收集到一个临时集合中,然后最终做某种重命名来替换之前的输出?
如果是这种情况,我可以运行常规批处理来更新一个集合,而不会冒任何时候它会空(或仅部分满)的风险?
答
是的。那是对的。现在替换非分片输出的方式是,它将获取写入锁定,删除旧数据库,并将该临时集合重命名为输出集合,并释放写入锁定。由于只有一个写锁,所以基本上可以保证这个操作是原子操作。但是,合并和减少不能说相同。