我有时间序列数据逐点流式传输,比如每5秒钟一次。这些点可能无序到达。我希望实时汇总到更高的时间跨度,比如5米,30米,60米。我主要担心的是快速阅读。
我对执行此实时聚合的常用技术感兴趣。我认为我需要在磁盘上存储一个长期存储,但是对于接近实时的点,我认为我应该将它们存储在内存中,以便更容易聚合。
是将它们存储在内存缓存(Redis)中的首选方法,然后定期触发计算聚合并刷新到磁盘的作业吗?如果是这样,如果我得到定期工作运行后到达的点怎么办?我是否会回去扔掉那一点再计算一段时间?
我可能在这里回答我自己的问题,但是我在那里寻找任何替代品。
提前致谢。克里斯: - )
答案 0 :(得分:1)
有许多选项,使用哪个选项取决于您需要多少精确数字。
如果您不需要完美计数,则可以使用时间戳和其他属性作为键,使用HyperLogLog存储它们。这样一来,如果数据不按顺序出现就无所谓了。
答案 1 :(得分:1)
许多工具确实希望您有自定义时间戳,因为数据结构假定为。
总是需要权衡利弊。 在我看来,你有两个选择:
使用常用的TSDB - 大多数都假设您的数据是有序的。 您可能需要订购数据。为此,您需要确定无序样本应该到达的最长时间。
如果您不能丢失任何数据,您应该寻找可以持续更新现有数据的工具。
如果您使用StatsD创建流数据,您可以将其配置为您希望的任何刷新间隔。
如果您正在寻找redis的时间序列数据结构,我开始研究一个模块(它尚未在生产中进行测试,API可能会发生变化)。 https://github.com/danni-m/redis-tsdb