草庐IT

MongoDB - 物化 View /OLAP 样式聚合和性能

coder 2023-05-05 原文

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

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

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

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

这是我的问题。

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

提前感谢您的回复!

最佳答案

How good (or bad) does MongoDB handle map reduce in terms of performance? Do you really need a lot of machines to get acceptable performance?

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 集合以进行输入和输出。

In terms of workflow, is it relatively easy to store and merge the incremental results generated by map reduce?

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

How much of a performance improvement does the aggregation framework offer?

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

MongoDB 2.2 尚未正式发布,但 2.2rc0 release candidate从 7 月中旬开始提供。

Does the aggregation framework offer the ability to store results incrementally in a similar manner that the map/reduce functionality that already exists does.

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

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

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

关于MongoDB - 物化 View /OLAP 样式聚合和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11810911/

有关MongoDB - 物化 View /OLAP 样式聚合和性能的更多相关文章

  1. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  2. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  3. ruby - 如何使用文字标量样式在 YAML 中转储字符串? - 2

    我有一大串格式化数据(例如JSON),我想使用Psychinruby​​同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解

  4. ruby - 如何在 Ruby 中拆分参数字符串 Bash 样式? - 2

    我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"

  5. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  6. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  7. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

  8. ruby-on-rails - 复数 for fields_for has_many 关联未显示在 View 中 - 2

    目前,Itembelongs_toCompany和has_manyItemVariants。我正在尝试使用嵌套的fields_for通过Item表单添加ItemVariant字段,但是使用:item_variants不显示该表单。只有当我使用单数时才会显示。我检查了我的关联,它们似乎是正确的,这可能与嵌套在公司下的项目有关,还是我遗漏了其他东西?提前致谢。注意:下面的代码片段中省略了不相关的代码。编辑:不知道这是否相关,但我正在使用CanCan进行身份验证。routes.rbresources:companiesdoresources:itemsenditem.rbclassItemi

  9. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  10. ruby-on-rails - 在 haml View 中重构条件 - 2

    除了可访问性标准不鼓励使用这一事实指向当前页面的链接,我应该怎么做重构以下View代码?#navigation%ul.tabbed-ifcurrent_page?(new_profile_path)%li{:class=>"current_page_item"}=link_tot("new_profile"),new_profile_path-else%li=link_tot("new_profile"),new_profile_path-ifcurrent_page?(profiles_path)%li{:class=>"current_page_item"}=link_tot("p

随机推荐