我们需要定期处理相当大的数据集(30-40GB)。它有很多按时间排序的值(以及更多信息),但我们基本上需要按月执行一些数学运算。
我们的第一种方法是使用MySQL数据库来备份数据,因为我们对引擎和关系方法有一定的经验。但是,该过程耗时太长,我们想知道NoSQL方法是否可以做得更好。
基本上,我们需要表达的数据是:
Value: { NumericalValue, Year, Month } Entity: List of 'Value'
我们处理此列表三次,执行简单的数学运算,当我说“处理”时,我的意思是遍历数据集并执行演算。当一切都结束时,我们具有相同的结构(但具有不同的数据):
现在是我们发现最大问题的时候,我们需要计算一些平均数,这需要很多时间。当我们重复此过程几次时,我认为最耗时的任务是:
1)将数据集导出到MySQL。这意味着很多来自文本文件的插入。
当数据转换时:
2)计算一些包含带有LIMIT的聚合函数(AVG,SUM)的查询。3)使用整个数据集计算一些包含聚合函数的查询。
通常,即使添加了一些索引,我们也会感觉花费的时间太长(某些查询需要20分钟)。任何技巧或解决方法将不胜感激。我觉得NoSQL数据库不是专门为此设计的,但是也许有些经验可以有所帮助:)。
谢谢你的时间,
您的任务非常适合Columnar数据库。面向列的NoSQL(例如Cassandra)数据库将数据表存储为数据列的一部分,而不是数据行。这大大提高了聚合速度。这与依赖硬盘进行存储的系统有关。如果不是这种情况(例如内存数据库),则有更多选择可以降低性能。