我有一个mongodb,其中有成千上万条包含很长向量的记录。
我正在寻找使用某种算法的输入向量与我的MDB数据集之间的相关性。
伪代码:
function find_best_correlation(input_vector)
max_correlation = 0
return_vector = []
foreach reference_vector in dataset:
if calculateCorrelation(input_vector,reference_vector) > max_correlation then:
return_vector = reference_vector
return return_vector
这是map-reduce模式的很好候选者,因为我不在乎计算的运行顺序。
问题是我的数据库位于一个节点上。
我想同时运行许多映射(我有一个8核计算机)
据我了解,MongoDb每个节点仅使用一个执行线程-实际上,我是在串行运行数据集。
这样对吗?
如果可以,我可以配置每个map-reduce运行的进程/线程数吗?
如果我管理并行运行map-reduce的多个线程,然后汇总结果,我的性能会大大提高(有人尝试过)吗?
如果不是,我可以在同一节点上对数据库进行多个复制,并在两个复制上运行“技巧” mongoDb吗?
谢谢!
最佳答案
MongoDB中的Map reduce使用Spidermonkey(单线程Javascript引擎),因此无法配置多个进程(并且没有“技巧”)。有一个使用多线程JS引擎的JIRA票证,您可以在此处遵循:
https://jira.mongodb.org/browse/SERVER-2407
如果可能,我会考虑研究新的聚合框架(在MongoDB 2.2版中可用),该框架是用C++而不是Javascript编写的,并且可能会提高性能:
http://docs.mongodb.org/manual/applications/aggregation/