Mongo支持Map/Reduce查询,但它们似乎不是Hadoop意义上的Map-Reduce(并行运行)。在大型Mongo数据库上运行查询的最佳方式是什么?我需要把它出口到另一个地方吗?
根据您具体需要做什么,您的选择(在Mongo中)是:
1) 在Mongo中继续使用map/reduce,但为了m/r的目的启动一些辅助设备。这是一种比较简单的并行化map reduce的方法。不过,也有一些限制,您只能使用"out:inline"选项,因此结果需要在~16MB或以下。只有当你还没有进行碎片化时,这才是真正可行的。
2) 看看2.2中的聚合框架(2.2.0-rc0已经发布,我们发现它在MongoHQ中非常稳定)。这在数据库级别上得到了更好的优化,主要是让你远离janky javascript引擎,也是10gen添加的更有趣的功能之一。它也将在分片环境中工作。
对于以上任何一种情况,您都需要确保有足够的RAM(或真正快速的磁盘)来保存所有输入数据、中间步骤和结果。否则,你会受到IO速度的限制,不会从你的CPU中得到太多。
如果你想走出Mongo,你可以试试Mongo Hadoop适配器。Hadoop是一种更好的map/reduce方法,它将允许您使用Mongo数据作为输入。然而,这可能在操作上很复杂,这意味着要么付出高昂的努力,要么很脆弱。