2

Mongo 支持 Map/Reduce 查询,但它们似乎不是 Hadoop 意义上的 map reduce(并行运行)。在庞大的 Mongo 数据库上运行查询的最佳方式是什么?我需要将其导出到另一个地方吗?

4

1 回答 1

1

根据您需要做什么,您的选择(在 Mongo 中时)是:

1) 继续在 Mongo 中使用 map/reduce,但为了 m/r 的目的启动一些辅助。这是一种比较简单的并行化 map reduce 的方法。但是有限制,您只能使用“out: inline”选项,因此结果需要为 ~16MB 或更少。这只有在你还没有分片的情况下才真正可行。

2) 查看 2.2 中的聚合框架(2.2.0-rc0 已经发布,我们发现它在 MongoHQ 中相当稳定)。这在 db 级别上得到了更好的优化,主要是让您远离 janky javascript 引擎,并且是 10gen 添加的更有趣的功能之一。它也可以在分片环境中工作。

对于上述任何一种情况,您都需要确保有足够的 RAM(或速度非常快的磁盘)来保存所有输入数据、中间步骤和结果。否则,您会受到 IO 速度的限制,并且无法从 CPU 中获得太多。

如果你想跳出 Mongo,你可以试试Mongo Hadoop适配器。Hadoop 是一种更好的 map/reduce 方法,它可以让您使用 Mongo 数据作为输入。然而,这在操作上可能很复杂,这意味着要么付出高昂的努力,要么很脆弱。

于 2012-07-21T00:04:52.753 回答