【问题标题】:aggregation and statistical functions on NOSQL databasesNOSQL 数据库上的聚合和统计功能
【发布时间】:2013-11-29 17:52:18
【问题描述】:

使用 SQL 数据库,无需将数据导出到应用程序服务器,即可轻松执行统计/聚合函数,如协方差、标准差、峰度、偏度、偏差、均值和中位数、求和和乘积等。 http://www.xarg.org/2012/07/statistical-functions-in-mysql/

在一般的 NoSql 数据库和特别是 dynamodb(cassandra) 上,对于大型数据集,如何有效地完成此类计算(尽可能靠近存储,假设 map/reduce “作业”不是实时的)。

AWS RDS(MySQL、PostgresSQL,...)不是 NoSQL,而 Amazon Redshift(ParAccel)——一个列存储——有一个 SQL 接口,可能有点过头了(6.85 美元/小时)。 Redshift 的聚合功能有限(http://docs.aws.amazon.com/redshift/latest/dg/c_Aggregate_Functions.htmlhttp://docs.aws.amazon.com/redshift/latest/dg/c_Window_functions.html

【问题讨论】:

    标签: mysql postgresql cassandra amazon-dynamodb amazon-redshift


    【解决方案1】:

    对于没有聚合功能的数据库(例如 Cassandra),您总是需要提取一些数据。目前,在您的数据库附近构建分布式计算集群是一种流行的选择(使用诸如Storm 之类的项目)。通过这种方式,您可以并行请求和处理数据以执行操作。将其视为“实时”Hadoop(尽管不一样)。

    实施这样的设置显然比拥有一个开箱即用的支持系统要复杂得多,因此请在您的决定中考虑到这一点。好处是,如果需要,集群允许您执行复杂的自定义分析,这超出了传统数据库解决方案所支持的任何内容。

    【讨论】:

      【解决方案2】:

      嗯,在 MongoDB 中,您可以创建某种 UDF:

      db.system.js.save( { _id : "Variance" ,
      value : function(key,values)
      {
          var squared_Diff = 0;
          var mean = Avg(key,values);
          for(var i = 0; i < values.length; i++)
          {
              var deviation = values[i] - mean;
              squared_Diff += deviation * deviation;
          }
          var variance = squared_Diff/(values.length);
          return variance;
      }});
      
      
      db.system.js.save( { _id : "Standard_Deviation"
      , value : function(key,values)
      {
          var variance = Variance(key,values);
          return Math.sqrt(variance);
      }});
      

      描述是here

      【讨论】:

        【解决方案3】:

        MongoDB 有一些聚合功能可能满足您的需求http://docs.mongodb.org/manual/aggregation/

        【讨论】:

          猜你喜欢
          • 2021-08-18
          • 1970-01-01
          • 2017-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-14
          • 2017-11-01
          • 1970-01-01
          相关资源
          最近更新 更多