【问题标题】:MongoDB - Materialized View/OLAP Style Aggregation and PerformanceMongoDB - 物化视图/OLAP 样式聚合和性能
【发布时间】:2017-07-08 13:40:40
【问题描述】:

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

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

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

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

这是我的问题。

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

提前感谢您的回复!

【问题讨论】:

    标签: mongodb nosql


    【解决方案1】:

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

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

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

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

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

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

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

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

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

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

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

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

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

    【讨论】:

    • 更新:从 Mongo 2.4 开始,默认的 JavaScript 引擎现在是 V8 (docs.mongodb.org/manual/release-notes/2.4/…)
    • 我喜欢你的答案,但意识到它们是 7 年前写的。有什么变化吗?
    • @Tae-SungShin A lot 在 7 年多的时间里发生了变化。聚合框架绝对是性能、可扩展性和面向未来的推荐方法。 MongoDB 2.2 包含了聚合框架的第一个版本。 MongoDB 的后续版本添加了read-only views (MongoDB 3.4)、materalised views (MongoDB 4.2) 以及更丰富的aggregation stages and operators
    • MongoDB Hadoop 连接器不再受支持。现代替代方案包括官方的Kafka ConnectorMongoDB Connector for Spark。除了聚合之外,还有许多其他changes to MongoDB since 2.2,包括查询引擎重写、新的默认存储引擎(WiredTiger)、多文档分布式事务支持、对表达连接的支持、图遍历和更改流。我将从当前文档开始了解更多信息。
    【解决方案2】:

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

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

    【讨论】:

    • 有趣。这个 group_level 函数的性能如何?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多