我有一个mongodb,它有数千条记录,其中包含非常长的向量。我正在使用某种算法寻找输入向量与MDB数据集之间的相关性。
psudo代码:
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
这是地图缩减模式的一个很好的候选者,因为我不在乎计算的运行顺序
问题是我的数据库在一个节点上。我想同时运行许多映射(我有一台8核机器)
据我所知,MongoDb每个节点只使用一个执行线程——实际上我是串行运行我的数据集。这是正确的吗?
如果是,我可以配置每个映射减少运行的进程/线程数吗?如果我管理多个并行运行map reduce的线程,然后聚合结果,我的性能会大幅提高吗(有人尝试过吗)?如果不是-我可以在同一个节点上对我的数据库进行多个复制,并"欺骗"mongoDb在2个复制上运行吗?
谢谢!
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/