Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何解决map reduce体系结构中的顺序问题?_Algorithm_Mongodb_Mapreduce - Fatal编程技术网

Algorithm 如何解决map reduce体系结构中的顺序问题?

Algorithm 如何解决map reduce体系结构中的顺序问题?,algorithm,mongodb,mapreduce,Algorithm,Mongodb,Mapreduce,对于map reduce操作中使用的任何键,具有can键的元素可能遵循某种自然顺序 假设我们想要找到元素e0和e1,这样: 每个都属于同一个密钥, 它们遵循一些顺序e0

对于map reduce操作中使用的任何键,具有can键的元素可能遵循某种自然顺序

假设我们想要找到元素e0和e1,这样:

每个都属于同一个密钥, 它们遵循一些顺序e0 解决这一问题的一种常用数据库方法是,只需将光标放在按顺序排列的集合上。跟踪最后看到的元素和当前元素,并测试关系

map reduce的问题在于,在减少e0和e1的reduce调用中,没有wat可以知道是否存在一个en,这会破坏您对e0和e1是连续的假设


有没有聪明的方法来解决这个问题?或者mapreduce框架可以保证reduce调用中的一组元素是连续的?它可以在mongodb中完成吗?

MapReduce是并行编程的范例。阿姆达尔定律将由于并行化而获得的加速比限制为1/s+P/N,其中s和P是代码的串行/并行部分的分数,N是处理器的数量。如果S=1,则P=0,加速比为1,即,使用任意数量的N个处理器在计算时间方面没有好处。因此,如果你有一个连续的,即100%非并行的,像计算一个非关联的简化操作作业,MapReduce永远也帮不上忙。注意:可能您的问题比您想象的更为并行。

您可以将排序选项传递给map reduce。这会让你得到你想要的:


不过,如果没有更具体的例子,很难回答您的问题。

您案例的实际例子是作为webanalytics一部分的点击流分析

在这个实际例子中,我们发现我们可以通过两种方式在Hadoop中解决这个问题:

只需在reducer中提取内存中的所有事件,在内存中对它们进行排序并完成工作。 使用名为secondary sort的hadoop特性,让记录按照您选择的排序顺序到达reducer。
虽然我的回答是基于我使用hadoop的经验,但我认为这一思路可能会在mongodb环境中对您有所帮助。

我不确定我是否在跟进,您是否有兴趣在map/reduce步骤中找到这些元素?还是在缩减步骤内?如果第一个:map/reduce可以用于排序,那么它当然可以找到这样的一对。而游标/迭代器方法不需要额外的内存。你能提供算法实现的链接吗?我似乎找不到什么好东西。问题:如何解决map reduce体系结构中的顺序问题?回答:效率低下。@Patrick87,我也这么怀疑,因此提出了这个问题。我只是希望得到更多实质性的评论/参考/想法。@z5h:MapReduce是并行编程的范例。阿姆达尔定律将由于并行化而获得的加速比限制为1/s+P/N,其中s和P是代码的串行/并行部分的分数,N是处理器的数量。如果S=1,则P=0,加速比为1,即,使用任意数量的N个处理器在计算时间方面没有好处。因此,如果你有一个连续的,即100%非并行的,像计算一个非关联的简化操作作业,MapReduce永远也帮不上忙。注意:也许你的问题比你想象的更平行。对。这意味着我的reduce输入将被订购,但这并不意味着我不会在任何特定reduce调用中丢失我的“en”。