2017-09-07 28 views
0

我目前正在研究一个需要我们存储大量时间序列数据的项目,但更重要的是,需要快速检索大量时间序列数据。关于如何存储和检索时间序列数据的建议

会有N个设备(> 10,000),它们会周期性地向系统发送数据,可以说每5秒钟一次。这些数据将很快建立起来,但我们通常只对最近的数据感兴趣,并且想要压缩旧数据。我们不想删除它,因为它仍然有用,但是一天中有数千个数据点,而我们可能在N天/周/月过去之后仅保存5或10个数据。

具体而言,我们希望能够在大量时间段(例如一两年)获取采样数据。这里可能有数百万个点,但我们只想要一个小的,线性分布的这个数据样本。

今天我们正在试验influxdb,它最初似乎是一个很好的解决方案。它速度很快,可以让我们将数据存储在合理的结构中,但我们发现它并不完全令人满意。我们无法执行上述的示例查询,并且通常系统对我们来说感觉不够成熟。

任何有关我们如何继续或任何解决方案的意见,都非常感谢。

回答

1

您可能会感兴趣的看着TimescaleDB:

https://github.com/timescale/timescaledb

它建立在Postgres的顶部的时间序列数据库等提供完整的SQL支持,以及一般的Postgres的生态系统/可靠性。这可以给你更大的查询灵活性,这听起来像你想要的。

根据您的具体使用情况,确实会有两种解决方案。

首先,人们通常会做的是创建两个“可调整的”,一个用于原始数据,另一个用于采样数据。这些hypertables看起来像标准表的用户,但在幕后很大程度上划分为更好的可扩展性(例如,20倍插入吞吐量与Postgres的大型表的大小)。

那么你基本上做到从原料到取样表上卷,并在每个使用不同的数据保留政策(所以你把原始数据比如1个月,与采样数据为年)。

http://docs.timescale.com/getting-started/setup/starting-from-scratch http://docs.timescale.com/api/data-retention

其次,你可以用一个Hypertable的去了,然后就安排一个正常的SQL查询,以便从数据比某个时间段较老删除单个行。

我们甚至可能在未来增加对后一种方法更好一流的支持,如果它成为一个共同的,足够的请求的功能,但大多数使用情况下,我们所遇到迄今似乎更专注于#1,ESP。以便保留有关删除数据点的统计数据,而不仅仅是直接样本。

(声明:我是TimescaleDB的作者之一。)

+0

谢谢你的回答。我们在influxdb中使用了一些称为保留策略和持续查询的方法。这些连续的查询将定期为我们采样数据,但在此期间,表中包含“陈旧”数据。如果我们每周抽样,那么我们总是比数据落后一周。如果我们每天都抽样,那么我们总是落后一天,等等。一个要求是始终能够获取绝对最新的数据(采样)。这是可能的TimescaleDB? –

相关问题