2012-07-20 78 views
2

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

+0

海量有多大? – MrKurt 2012-07-20 23:56:47

+0

你的数据集有多大?你有没有需要运行的查询的例子? Map/Reduce不是唯一的选项... MongoDB支持多个[Indexes](http://www.mongodb.org/display/DOCS/Indexes)和[Query operators](http://www.mongodb.org)/display/DOCS/Advanced + Queries),并且在2.2中有一个[Aggregation Framework](http://docs.mongodb.org/manual/applications/aggregation/)。 – Stennie 2012-07-20 23:59:31

回答

1

取决于正是你需要做什么,你的选择(而内停留蒙戈)是:

1)继续使用的map/reduce在蒙戈,但火起来的M/R目的,一些次级。这是并行map reduce的一种简单方法。但是有限制,你只能使用“out:inline”选项,所以结果需要大约16MB或更少。如果你尚未分解,这只有真正的可行。

2)看看2.234中的aggregation framework(2.2.0-rc0不存在,我们发现它在MongoHQ中非常稳定)。这在数据库级别上得到了更好的优化,大多让你摆脱了笨拙的JavaScript引擎,并且是10gen添加的更有趣的功能之一。它也将在分散的环境中工作。

对于上述任何一种情况,您都希望确保有足够的RAM(或真正快速的磁盘)来保存所有输入数据,中间步骤和结果。否则,你会受到IO速度的限制,并且不会从CPU中获取太多的功能。

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

相关问题