Redis模式设计-如何存储传感器数据流的滑动窗口?

时间:2018-07-30 14:09:53

标签: database-design redis hashset

这是我对传感器数据流的第一个架构设计,应从Redis客户端(<10)查询其N-过去的读数。

  1. 何时将客户端数据保存在循环缓冲区中而不是进行查询?由于某些传感器每周有1x的频率为100Hz,其他传感器则不是一周,因此慢速传感器不是客户端的选择,使用本地/远程混合设计可能会带来复杂性吗?

  2. 基本上可以归结为大量序列化大量查询,这是我在初稿中注意到的两种模式: enter image description here
    它从排序集开始,以按时间戳快速筛选,然后该值是一个字符串化的对象(例如5x属性id / temp / humid ..),或将该对象放入由唯一值引用的外部哈希集中以检索该哈希集
    左侧选项一中的工作流程会导致大的反序列化对象,但一个查询却会导致大量查询,但由于细粒度访问而导致有效负载减少。您什么时候使用什么,我会缺少模式吗?

  3. 读到Cap'n Proto, FlatBuffers, and SBE(消息包,avro,protobuff)以及通过随机访问来访问字段详细信息的能力,主题较少的较大字符串化对象似乎是件好事吗?存储大小很重要,因为我的Droplet只有1GB RAM运行debian。尊重tcp数据包的大小也很重要,对于500char字符串化对象应该可以使用

      

    数据大小保持在以太网数据包大小(约1500)下   个字节)。实际上,处理10个字节,100个字节或1000个字节   查询几乎导致相同的吞吐量。请参见下图。 how fast is redis blog

同样精通这一点的博客帖子/指针也很棒。


enter image description here

1 个答案:

答案 0 :(得分:1)

我建议使用LPUSHLTRIM为每个传感器创建一个滑动的数据窗口。对象被序列化。如果您将快速序列化方法与预定义的预编译模式(colfer,protobuf,cap'n'proto)一起使用,将会非常快。

在宏伟的事物上,您可以使用消息队列系统,该系统将传感器数据推送到Redis进行滑动窗口,并推送到时间序列DB进行历史数据和分析(并可能推送到某些后端进行实时分析)。