2012-08-04 135 views
6

我一直在阅读MongoDB。我对聚合框架能力特别感兴趣。我正在考虑采用多个数据集,每个数据集至少包含每月至少一千万行以上的数据,并创建聚合数据。这是时间序列数据。MongoDB - 物化视图/ OLAP样式聚合和性能

例子。使用Oracle OLAP,您可以在第二/分钟级别加载数据,并将此卷数增加到几小时,几天,几周,几个月,几个季度,几年等等...只需定义维度并从此处开始即可。这工作得很好。

到目前为止,我已经读了MongoDB的可利用它的地图功能降低处理上面。可以实现地图缩减功能,以便逐步更新结果。这是有道理的,因为我会加载新的数据,例如每周或每月,我希望只需要处理正在加载的新数据。

我也读过MongoDB中的map reduce可能会很慢。为了克服这个问题,这个想法是使用便宜的商品硬件并将负载分散到多台机器上。

所以这里是我的问题。

  1. MongoDB在性能方面处理map reduce有多好(或不好)?你真的需要很多机器才能获得可接受的性能吗?
  2. 在工作流方面,存储和合并map reduce生成的增量结果是否相对容易?
  3. 聚合框架提供了多少性能改进?
  4. 聚合框架是否提供了以类似方式增量存储结果的功能,即已存在的地图/缩减功能的功能。

我欣赏提前您的答复!

回答

8

在性能方面,MongoDB处理映射的性能有多好(或不好)?你真的需要很多机器才能获得可接受的性能吗?

MongoDB的Map/Reduce实现(截至2.0.x)受其依赖于单线程SpiderMonkey JavaScript engine的限制。对v8 JavaScript engine进行了一些实验,改进的并发性和性能是一个总体设计目标。

Aggregation Framework是用C++编写,并具有扩展性更强的实施,包括“管道”的做法。每个管道目前都是单线程的,但您可以并行运行不同的管道。聚合框架目前不会取代可以在Map/Reduce中完成的所有作业,但可以简化大量常见用例。

第三选项是经由MongoDB Hadoop Connector组合使用MongoDB的用于存储用Hadoop。 Hadoop目前具有更高扩展性的Map/Reduce实现,并且可以通过Hadoop连接器访问MongoDB集合以进行输入和输出。

在工作流方面,存储和合并map reduce生成的增量结果是否相对容易?

Map/Reduce有几个output options,包括将增量输出合并到以前的输出集合或返回内联结果(在内存中)。

聚合框架提供了多少性能改进?

这真的取决于您的Map/Reduce的复杂性。整体而言,汇总框架更快(在某些情况下,这一点非常重要)。您最好对自己的用例进行比较。

MongoDB 2.2尚未正式发布,但2.2rc0 release candidate已于7月中旬上市。

聚合框架是否提供了以类似方式增量存储结果的功能,即已存在的地图/缩减功能的功能。

聚合框架目前仅限于内联返回结果,因此您必须在返回结果时处理/显示结果。结果文档也受限于MongoDB中的最大文档大小(当前为16MB)。

有一个建议$out管道命令(SERVER-3253)将来可能会添加更多的输出选项。

一些进一步的阅读可能会感兴趣:

+2

更新:由于蒙戈2.4默认现在Javscript引擎V8(的http://docs.mongodb.org/manual/release-notes /2.4/#javascript-engine-changed-to-v8) – del 2013-07-24 04:55:57