我们需要定期使用相当大的数据集(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数据库不是专门为此而设计的,但也许一些经验可以帮助:)。
感谢您的时间,
答案 0 :(得分:3)
您的任务非常适合Columnar数据库。 面向列的NoSQL(例如Cassandra)数据库将数据表存储为数据列的一部分而不是数据行。这大大提高了聚合速度。这与依赖硬盘进行存储的系统有关。如果不是这种情况(示例中的内存数据库),则有更多选项可以挤出性能。