Multithreading 多核服务器上的mongodb map reduce
我有一个mongodb,有数千条记录,包含很长的向量。 我正在使用某种算法查找输入向量与MDB数据集之间的相关性 psudo代码:Multithreading 多核服务器上的mongodb map reduce,multithreading,mongodb,parallel-processing,mapreduce,nodes,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,refere
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
这是MapReduce模式的一个很好的候选者,因为我不关心计算的运行顺序
问题是我的数据库位于一个节点上。
我想同时运行多个映射(我有一台8核的机器)
据我所知,MongoDb每个节点只使用一个执行线程——实际上,我是串行运行数据集的。
这是正确的吗
如果是,我可以配置每次map reduce运行的进程/线程数吗?
如果我管理多个并行运行map reduce的线程,然后聚合结果,我的性能会有很大提高(有人尝试过吗)?
如果没有,我可以在同一个节点上复制多个DB,并“欺骗”mongoDb在2个复制上运行吗
谢谢 MongoDB中的Map reduce使用Spidermonkey,这是一个单线程Javascript引擎,因此不可能配置多个进程(并且没有“技巧”)。有一个JIRA票证可以使用多线程JS引擎,您可以按照以下步骤操作:
如果可能,我会考虑新的聚合框架(在MunGDB版本2.2中可用),它是用C++编写的,而不是JavaScript编写的,可以提供性能改进:
谢谢,但仍不清楚是否可以在同一台机器上重新进行多个复制。不建议在单个节点上运行多个MongoD实例。进程可能会争夺RAM之类的资源,这是应该避免的。避免单线程MR的另一个可能的解决方案可能是MongoDB Hadoop连接器,它将数据存储与处理分离:但为了提供更完整的答案,每个进程都有一个JS引擎,因此理论上(尽管不推荐),如果有多个Mongod,则应该可以在单个节点上运行多个MR作业。更好的解决方案是在不同的碎片上并行运行MR作业。更新:MongoDB使用V8,从版本2.3.1开始,issue SERVER-2407已关闭。但是,我不知道这是如何影响m/R作业的并发性的。在Mongo2.6中,对于写和映射减少的mongo实例,我仍然只看到一个CPU繁忙。