【问题标题】:mongodb map reduce on multicore server多核服务器上的mongodb map reduce
【发布时间】:2012-07-31 20:56:13
【问题描述】:

我有一个 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 以在 2 次复制上运行吗?

谢谢!

【问题讨论】:

    标签: multithreading mongodb parallel-processing mapreduce nodes


    【解决方案1】:

    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/

    【讨论】:

    • 谢谢,但仍然不清楚我是否可以在同一台机器上进行多次复制以再次工作。
    • 不建议在单个节点上运行多个 MongoD 实例。这些进程可能会竞争 RAM 等资源,这应该避免。避免单线程 MR 的另一种可能的解决方案可能是 MongoDB Hadoop 连接器,它将数据存储与处理分开:mongodb.org/display/DOCS/Hadoop
    • 但是为了提供更完整的答案,每个进程只有一个JS引擎,所以理论上(虽然不推荐),如果有的话应该可以在单个节点上运行多个MR作业多个 MongoD。更好的解决方案是在不同的分片上并行运行 MR 作业。
    • 更新:MongoDB 从版本 2.3.1 开始使用 V8,问题 SERVER-2407 已关闭。但是,我不知道这对 M/R 作业的并发性有何影响。
    • 从 mongo 2.6 开始,使用 write 和 map-reduce 繁重的 mongo 实例,我仍然看到只有一个 CPU 忙碌。
    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多