我有一个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/

09-30 13:29
查看更多