mongodb map在多核服务器上减少

时间:2012-07-31 20:56:14

标签: multithreading mongodb parallel-processing mapreduce nodes

我有一个拥有数千个记录的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

这是map-reduce模式的一个非常好的候选者,因为我不关心计算运行的顺序。

问题是我的数据库在一个节点上。 我想同时运行多个映射(我有一个8核机器)

据我所知,MongoDb每个节点只使用一个执行线程 - 实际上我是按顺序运行我的数据集。 这是对的吗?

如果是这样,我可以配置每个map-reduce运行的进程数/线程数吗? 如果我管理多个并行运行map-reduce的线程,然后汇总结果,我的性能会有很大提高(有人试过)吗? 如果没有 - 我可以在同一节点上多次复制我的数据库,并且“技巧”mongoDb可以在2次重复上运行吗?

谢谢!

1 个答案:

答案 0 :(得分:7)

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/