2017-02-04 102 views
1

我有时间序列数据流逐点,比如说每5秒钟。点可能不按顺序到达。我想实时汇总到更高的时间段,比如说5米,30米,60米。我主要关心的是快速读取。即时汇总时间序列数据

我对什么技术是常见的执行这种实时聚合感兴趣。我想我要在磁盘上需要一个长期存储,但是对于接近实时的点,我认为我应该将它们存储在内存中,以便更容易聚合。

将它们存储在内存高速缓存(Redis)中,然后定期触发一个计算聚合和刷新到磁盘的作业是首选方法吗?如果是这样,如果我在定期工作结束后得到了点数,该怎么办?我回去扔掉那个点再计算一次吗?

我可能在这里回答我自己的问题,但我正在寻找任何替代方案。

在此先感谢。克里斯:-)

回答

1

了很多工具也希望你有有序的时间戳因为数据结构假设。

总是有一个权衡。 当我看到它,你有两个选择:

  1. 使用常用TSDB - 其中大多数是假设你的数据是有序的。 您可能需要订购您的数据。为此,您需要确定无序样品应该到达的最长时间。

  2. 如果你不能丢失任何数据,你应该寻找可以不断更新现有数据的工具。

如果您使用StatsD创建流数据,您可以将其配置为您希望的任何刷新间隔。

如果您正在寻找redis的时间序列数据结构,我开始研究一个模块(未在生产环境中测试过,API可能会更改)。 https://github.com/danni-m/redis-tsdb

1

有很多选择,哪一个使用将取决于你需要多少准确的总数。

如果您不需要完美计数,则可以使用HyperLogLog将时间戳和其他属性用作关键字来存储它们。这样,如果数据出现乱序,这并不重要。

也有很多开源和商用时间序列数据库,如InfluxDBDruid等(谷歌搜索“时间序列数据库”)