据推测,这是不可能的(在MongoDB 2.2)从Map/Reduce函数内访问另一个数据库。除了潜在的性能影响外,还有可能造成死锁和其他不需要的副作用。
不幸离开print()
到蒙戈日志作为唯一的“带外”输出选项。
根据您的诊断输出,一种方法尝试是:
加入独特的标记,它会让你在日志输出识别输出(或者甚至输出运行)
序列使用tojson()
您的输出,所以它被记录了一些解析的结构和理想,当你print()
编写一个脚本来在一行上发出的mongod.log日志与你的独特的标记匹配线和插入到那些另一个集合用于报告的代码,将来自M/R函数内运行
实施例:
var diag = {
'run' : diagrun,
'phase': 'map',
'key' : z
}
print("MAPDIAG:" + tojson(diag));
实施例输出:
$ tail -f mongo.log | grep "^MAPDIAG"
MAPDIAG:{ "run" : "20120824", "phase" : "map", "key" : "dog" }
MAPDIAG:{ "run" : "20120824", "phase" : "map", "key" : "cat" }
MAPDIAG:{ "run" : "20120824", "phase" : "map", "key" : "cat" }
MAPDIAG:{ "run" : "20120824", "phase" : "map", "key" : "mouse" }
MAPDIAG:{ "run" : "20120824", "phase" : "map", "key" : "cat" }
MAPDIAG:{ "run" : "20120824", "phase" : "map", "key" : "dog" }
MAPDIAG:{ "run" : "20120824", "phase" : "reduce", "key" : "cat", "total" : 3 }
MAPDIAG:{ "run" : "20120824", "phase" : "reduce", "key" : "dog", "total" : 2 }
究竟是什么样的数据产生? MR的输出可以保存在一个集合中。在C#中,我将它指定为:MyInputCollection.MapReduce(map,reduce,MapReduceOptions.SetOutput(“MyOutputCollection”));然后您从持久集合“MyOutputCollection”中读取。 – 2012-08-01 07:42:21
我想保存独立于MR输出的信息。将其视为数据耗尽,例如,我想用代码处理详细的结构化日志记录/基准测试信息,因此我不希望它最终在日志文件中出现。 – Sim 2012-08-02 01:07:37
您是否尝试过使用加帽集合进行日志记录..我不太明白为什么coll.insert应该失败.. – 2012-08-02 05:19:45