2

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

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

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

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

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

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

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

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

当数据被转换时:

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

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

谢谢你的时间,

4

1 回答 1

3

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

于 2013-10-03T19:57:51.140 回答