如何存储历史时间序列数据

时间:2015-07-23 12:13:49

标签: mysql amazon-s3 time-series hdf5 influxdb

我们正在存储来自多个测量设备的一堆时间序列数据。 所有设备可能提供不同的尺寸(能量,温度等)

目前我们正在使用MySQL将所有这些数据存储在格式的不同表格中(根据维度)   idDevice,DateTime,val1,val2,val3

我们也是从min - >汇总这些数据。小时 - >日 - >月 - >每次我们插入新数据时的年份

运行得很好,但随着我们的发展,我们的磁盘空间不足,一般来说我怀疑RDBMS是保存档案数据的正确答案。

所以我们考虑在Amazon S3上移动旧/冷数据并写一些可以接收这些数据的花哨的getter。

所以我的问题来了:什么可以是支持以下需求的良好数据格式:

数据必须是可扩展的:一旦设备将提供更多数据,那么在过去 - >行数可以增长/增加

必须更新数据。当客户提供历史数据时,我们需要能够更新过去的数据。

我们正在使用PHP - >很高兴有连接器/类:))

我看过HDF5,但似乎没有PHP lib。 我们也愿意看一下基于云的TimeSeries数据库。

提前谢谢! 乙

3 个答案:

答案 0 :(得分:0)

您可以考虑转移到专用的时间序列数据库。我在InfluxDB工作,我们的产品现在满足您的大部分要求,尽管它仍然是1.0之前的版本。

  

我们也是从min - >汇总这些数据。小时 - >日 - >月 - >每次我们插入新数据时的年份

InfluxDB具有自动下采样和过期数据的内置工具。您所要做的就是编写原始点并设置一些查询和保留策略,InfluxDB在内部处理其余的事务。

  

数据必须是可扩展的:一旦设备将提供更多数据,那么在过去 - >行数可以增长/增加

只要历史写入相当频繁,它们对于InfluxDB来说就不是问题了。如果您经常使用非顺序数据写入,则写入性能可能会降低,但仅在复制非顺序点时才会降低。

InfluxDB不是完全没有架构的,但架构不能预先定义,而是从插入的点派生而来。您可以通过编写包含它们的新点来添加新标记(元数据)或字段(指标),并且可以通过在查询时排除或包含相关标记来自动编写或分解系列。

  

必须更新数据。当客户提供历史数据时,我们需要能够更新过去的数据。

当新的匹配点进入时,

InfluxDB会无提示地覆盖点。(匹配意味着相同的系列和时间戳,达到纳秒)

  

我们正在使用PHP - >很高兴有连接器/类:))

有很多针对InfluxDB 0.9的PHP库。没有一个是官方支持的,但很可能满足您的需求,足以扩展或分叉。

答案 1 :(得分:0)

您尚未指定您想要的内容。

您是否关心延迟?如果没有,只需将所有数据点写入S3中的每个间隔文件,然后定期收集并处理它们。 (不需要Hadoop,只需要下载新文件的简单脚本通常应该足够快。)这就是S3中的登录工作方式。

关于这一点非常好的部分是你永远不会超过S3或进行任何维护。如果您正确地为文件添加前缀,则可以轻松获取一天的数据或最后一小时的数据。然后,您对该数据进行日/周/月汇总,然后仅将汇总存储在常规数据库中。

您是否需要高分辨率的旧数据?您可以使用Graphite自动汇总数据。缺点是随着年龄的增长它会失去分辨率。但好处是你的数据是一个固定的大小,永远不会增长,写入可以快速处理。您甚至可以结合上述方法并将数据发送到Graphite以便快速查看,但是将数据保存在S3中以供其他用途使用。

我没有广泛研究过各种TSDB,但这里有一个很好的HN thread。 InfluxDB很好,但很新。 Cassandra更成熟,但是将它用作TSB的工具还不是全部。

你有多少新数据?大多数工具每秒可以轻松处理10,000个数据点,但并非所有数据都可以扩展到超过这个数据点。

答案 2 :(得分:0)

我与开发Axibase Time-Series Database的团队合作。它是一个非关系数据库,允许您有效地存储具有各种维度的带时间戳的测量。您还可以将设备属性(ID,位置,类型等)存储在同一个数据库中,以进行过滤和分组聚合。

默认情况下,ATSD不会删除原始数据。每个样本每个元组需要3.5+个字节:time:value。期间聚合在请求时执行,功能列表包括:MIN,MAX,AVG,SUM,COUNT,PERCENTILE(n),STANDARD_DEVIATION,FIRST,LAST,DELTA,RATE,WAVG,WTAVG以及一些其他功能计算每期的违规行为。

完全支持回填历史数据,但时间戳必须大于1970年1月1日。时间精度为毫秒或秒。

对于部署选项,您可以在AWS上托管此数据库。它运行在大多数Linux发行版上。如果您想在此处发布数据集中的样本数据,我们可以为您运行一些存储效率和吞吐量测试。