存储时间序列数据的最佳开源解决方案是什么?

18 投票
5 回答
14302 浏览
提问于 2025-04-15 13:53

我想监控一些对象。我预计每15分钟会收集大约10000个数据点。(可能一开始不会这么多,但大致就是这个范围)。我还希望能够获取每日、每周、每月和每年的统计数据。对于超过两个月的数据,保持最高的分辨率(15分钟)并不是特别重要。

我在考虑各种存储这些数据的方法,目前在看经典的关系型数据库,或者无模式数据库(比如SimpleDB)。

我的问题是,做这个事情的最佳方法是什么?我更倾向于使用开源(免费的)解决方案,而不是昂贵的专有软件。

小备注:我正在用Python编写这个应用。

5 个回答

1

这其实是很常见的数据仓库的内容。

有很多“事实”,这些事实是按照几个维度来组织的,其中一个维度就是时间。还有很多汇总的数据。

在很多情况下,简单的平面文件配合一些简单的汇总算法,比如用defaultdict,就能发挥很大的作用——既快又简单。

可以看看这个链接:高效存储73亿行数据

还有这个链接:大数据量时选择什么数据库?

8

推荐使用Tobi Oetiker的RRDTool!它是开源的,专门为这种需求设计的。

补充说明:

简单来说,RRDTool可以把时间序列数据存储在一个循环数据库里。它会在一段时间内保留原始数据,然后以可配置的方式进行压缩,这样你就可以在一个月内看到详细数据,在过去六个月内看到一周的平均数据,以及在过去两年内看到一个月的平均数据。一个好处是,你的数据库始终保持相同的大小(所以不用担心磁盘会满)。这就是存储方面的内容。在数据提取方面,RRDTool提供的数据查询可以立即转化为图表(例如png格式),你可以很方便地把这些图表放到文档和网页里。这是一个非常可靠、经过验证的解决方案,比它的前身MRTG更为通用(有些人可能听说过这个)。一旦你开始使用它,你会发现自己会不断地重复使用它。

想要快速了解RRDTool以及谁在使用它,可以查看这里。如果你想看看可以制作哪些类型的图形,记得去看看图库

12

HDF5 是一种专门用来处理非常大数据集的工具,你可以通过h5py 或者 PyTables 来使用它。这两个接口都很好用。例如,h5py 和 PyTables 都可以自动压缩数据,并且支持 Numpy(一个常用的科学计算库)。

撰写回答