这是我对传感器数据流的第一个架构设计,应从Redis客户端(<10)查询其N-过去的读数。
何时将客户端数据保存在循环缓冲区中而不是进行查询?由于某些传感器每周有1x的频率为100Hz,其他传感器则不是一周,因此慢速传感器不是客户端的选择,使用本地/远程混合设计可能会带来复杂性吗?
基本上可以归结为大量序列化或大量查询,这是我在初稿中注意到的两种模式:
它从排序集开始,以按时间戳快速筛选,然后该值是一个字符串化的对象(例如5x属性id / temp / humid ..),或将该对象放入由唯一值引用的外部哈希集中以检索该哈希集
左侧选项一中的工作流程会导致大的反序列化对象,但一个查询却会导致大量查询,但由于细粒度访问而导致有效负载减少。您什么时候使用什么,我会缺少模式吗?
读到Cap'n Proto, FlatBuffers, and SBE(消息包,avro,protobuff)以及通过随机访问来访问字段详细信息的能力,主题较少的较大字符串化对象似乎是件好事吗?存储大小很重要,因为我的Droplet只有1GB RAM运行debian。尊重tcp数据包的大小也很重要,对于500char字符串化对象应该可以使用
数据大小保持在以太网数据包大小(约1500)下 个字节)。实际上,处理10个字节,100个字节或1000个字节 查询几乎导致相同的吞吐量。请参见下图。 how fast is redis blog
同样精通这一点的博客帖子/指针也很棒。