MongoDB中的时间聚合

在探索使用MongoDB进行实时分析的方法时,似乎有一个相当标准的方法来做总和,但没有任何更复杂的聚合。 有些事情已经帮助...

  • Twitter的Rainbird:实时汇总,按层递增计数器。 卡桑德拉。
  • 雅虎的S4和来源:还不确定这是如何工作的,但它看起来像是实时的map-reduce。 因此,基本上,对于添加的每条记录,将其传递给映射器,将其转换为散列,然后将其发送到报告文档中。
  • http://www.slideshare.net/dacort/mongodb-realtime-data-collection-and-stats-generation
  • 蜂鸟
  • 做和的基本方法是自动为每个新记录添加文档键,以缓存常见查询:

    Stats.collection.update({"keys" => ["a", "b", "c"]}, {"$inc" => {"counter_1" => 1, "counter_2" => 1"}, "upsert" => true);
    

    除了总和以外,这不适用于汇总。 我的问题是,像这样的事情可以用mongodb中的平均值最小值最大值来完成吗?

    假设你有这样的文件:

    {
      :date => "04/27/2011",
      :page_views => 1000,
      :user_birthdays => ["12/10/1980", "6/22/1971", ...] # 1000 total
    }
    

    你能做一些原子或优化/实时操作,把生日分成这样的东西吗?

    {
      :date => "04/27/2011",
      :page_views => 1000,
      :user_birthdays => ["12/10/1980", "6/22/1971", ...], # 1000 total
      :average_age => 27.8,
      :age_rank => {
        "0 to 20" => 180,
        "20 to 30" => 720,
        "30 to 40" => 100,
        "40 to 50" => 0
      }
    }
    

    ...就像你可以做的Doc.collection.update({x => 1}, {"$push" => {"user_birthdays" => "12/10/1980"}})添加一些东西到一个数组,而不必加载文档,你可以做这样的事情来平均/聚合数组吗? 有没有什么东西可以用于实时聚合?

    MapReduce用于在批处理作业中执行此操作,我正在寻找诸如实时map-reduce之类的模式:

  • 平均值 :每当你用mongodb将一个新项目推送到一个数组时,实时平均这些值的最佳方法是什么?
  • 分组 :如果您将年龄分组为10年括号,并且您有一个年龄段数组,那么当您使用新时代更新文档时,如何最优地更新每个组的计数? 说年龄阵列将不断推/拉。
  • 最小值/最大值 :有什么方法可以计算和存储该文档中该年龄段数组的最小/最大值?

  • 你能做一些原子或优化/实时操作,把生日分成这样的东西吗?

    看起来您已经添加了两个字段age_rankaverage_age 。 这些都是根据您已拥有的数据有效计算的字段。 如果我向您提供页面浏览量和用户生日的文档,客户端代码应该非常简单,以查找最小/最大值,平均值等。

    在我看来,你要求MongoDB为你服务器端执行聚合。 但是你添加了你不想使用Map / Reduce的限制?

    如果我正确理解你的问题,你正在寻找可以说“将这个项目添加到数组并且让所有相关项目自我更新”的东西? 你不希望读者执行任何逻辑,你希望一切都在服务器端“神奇地”发生。

    所以有三种不同的方法来解决这个问题,但目前只有其中一种:

  • 编写这个逻辑客户端。 这听起来不像你想要的解决方案,但它会起作用。 如果你有基础数据,在大多数语言中做max / min / med / avg应该是相当平凡的。
  • 利用即将推出的聚合功能。 这些不在1.9.x之前安排。 改进的聚合将允许提取您正在查找的数据,但是,您仍然必须编写适当的查询。 底层数据库仍然不包含您正在查找的数据。
  • 你需要触发器。 如果您确实希望数据库始终保持一致并包含汇总数据,那么这就是您所需要的。 但是,触发器功能尚不存在。
  • 不幸的是,你现在唯一的选择是#1。 幸运的是,我知道一些成功使用选项#1的人。


    计划为即将发布的1.9.x不稳定版本计划工作,该版本可能具有聚合功能。

    请参阅:https://jira.mongodb.org/browse/SERVER-447

    当然,它可能会被bumepd发布到更高版本/

    链接地址: http://www.djcxy.com/p/52255.html

    上一篇: Time Aggregations in MongoDB

    下一篇: Get function backtrace in bash from trap handler (using caller)