【问题标题】:How NoSQL databases perform on aggregate functions (AVG, SUM, etc)NoSQL 数据库如何在聚合函数(AVG、SUM 等)上执行
【发布时间】:2013-08-14 17:19:59
【问题描述】:

我们需要定期处理一个相当大的数据集(30-40GB)。它有很多按时间排序的值(以及更多信息),但我们基本上需要按月执行一些数学运算。

我们的第一种方法是使用 MySQL 数据库来支持数据,因为我们在引擎和关系方法方面有相当的经验。然而,这个过程耗时太长,我们想知道 NoSQL 方法是否可以做得更好。

基本上我们需要表达的数据是:

Value: { NumericalValue, Year, Month }
Entity: List of 'Value'

我们处理这个列表三次,进行简单的数学运算,当我说“处理”时,我的意思是遍历数据集并执行微积分。当一切都结束时,我们有相同的结构(但数据不同):

Value: { NumericalValue, Year, Month }
Entity: List of 'Value'

现在我们发现了最大的问题,因为我们需要计算一些 AVERAGES 并且需要很多时间。当我们多次重复这个过程时,我认为最耗时的任务是:

1) 将数据集导出到 MySQL。这意味着来自文本文件的大量插入。

当数据被转换时:

2) 使用 LIMIT 计算一些包含聚合函数 (AVG,SUM) 的查询。 3) 用整个数据集计算一些包含聚合函数的查询。

通常,即使添加了一些索引,我们也会觉得处理时间太长(一些查询需要 20 分钟)。任何提示或解决策略将不胜感激。我觉得 NoSQL 数据库并不是专门为此设计的,但也许一些经验会有所帮助:)。

感谢您的宝贵时间,

【问题讨论】:

    标签: nosql redis


    【解决方案1】:

    您的任务非常适合列式数据库。 面向列的 NoSQL(例如 Cassandra)数据库将数据表存储为数据列的部分,而不是数据行。这大大提高了聚合的速度。这与依赖硬盘进行存储的系统有关。如果不是这种情况(例如内存数据库),还有更多选项可以提高性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 2013-11-29
      • 1970-01-01
      相关资源
      最近更新 更多