6

我一直在阅读 MongoDB。我对聚合框架的能力特别感兴趣。我正在考虑采用每月至少包含 10+ 百万行的多个数据集,并根据这些数据创建聚合。这是时间序列数据。

例子。使用 Oracle OLAP,您可以在秒/分钟级别加载数据,并将此汇总到小时、天、周、月、季度、年等...只需定义您的维度并从那里开始。这工作得很好。

到目前为止,我已经读到 MongoDB 可以使用它的 map reduce 功能来处理上述问题。可以实现 Map reduce 功能,以便增量更新结果。这是有道理的,因为我会每周或每月加载新数据,并且我希望只需要处理正在加载的新数据。

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

所以这是我的问题。

  1. 就性能而言,MongoDB 处理 map 的效果如何?您真的需要很多机器才能获得可接受的性能吗?
  2. 在工作流方面,map reduce 生成的增量结果是否比较容易存储和合并?
  3. 聚合框架提供了多少性能改进?
  4. 聚合框架是否提供了以类似于已经存在的 map/reduce 功能的方式增量存储结果的能力。

我提前感谢您的回复!

4

2 回答 2

9

就性能而言,MongoDB 处理 map 的效果如何?您真的需要很多机器才能获得可接受的性能吗?

MongoDB 的 Map/Reduce 实现(从 2.0.x 开始)受到其对单线程SpiderMonkey JavaScript 引擎的依赖的限制。已经对v8 JavaScript 引擎进行了一些实验,提高并发性和性能是总体设计目标。

新的聚合框架是用 C++ 编写的,具有更可扩展的实现,包括“管道”方法。每个管道当前都是单线程的,但您可以并行运行不同的管道。聚合框架目前不会取代所有可以在 Map/Reduce 中完成的作业,但确实简化了许多常见用例。

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

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

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

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

这实际上取决于您的 Map/Reduce 的复杂性。总体而言,聚合框架更快(在某些情况下,速度更快)。您最好对自己的用例进行比较。

MongoDB 2.2 尚未正式发布,但2.2rc0 候选版本已于 7 月中旬推出。

聚合框架是否提供了以类似于已经存在的 map/reduce 功能的方式增量存储结果的能力。

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

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

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

于 2012-08-06T04:06:50.010 回答
4

Couchbase map reduce 旨在构建增量索引,然后可以动态查询您正在寻找的汇总级别(很像您在问题中给出的 Oracle 示例)。

以下是如何使用 Couchbase 完成此操作的文章:http: //www.couchbase.com/docs/couchbase-manual-2.0/couchbase-views-sample-patterns-timestamp.html

于 2012-08-07T21:23:56.757 回答