物联网系统中,需要实时处理的数据可通过队列送入流处理引擎;不需要实时处理的数据,用于离线分析或数据挖掘,需要先存储起来。物联网系统的数据存储的方式很多,要根据实际场景来选择。
物理网系统各种可能的存储选择
物联网的数据主要是通过传感器采集, 经过解析和清洗, 以结构化的格式进行存储。在数据量不大的情况下, 用mysql等关系数据库就可以满足我们的需求。如果经常有很多报表统计的需要,也可以使用clickhouse、greenplum等nosql数据库。
物联网系统的数据存在特殊性,不同于传统互联网应用,除了互联网应用常用的数据库,可以结合物联网系统的数据特点,设计专门的数据存储系统。
物联网数据特点
数据写入
物联网系统的数据写入具有平稳、持续、高并发高吞吐的特点;通常写多读少,实时写入传感器最近生成的数据,几乎没有数据更新的操作。
数据查询和分析
- 物联网系统的数据通常需要按时间范围读取,系统使用者不会去关心某个特定点的数据,关心的是一段时间的数据;
- 时间近的数据被读取的概率高,查询的粒度比较细;反之时间远的数据被读取的概率低,查询粒度比较粗;
- 物联网系统往往需要支持多精度的数据查询和多维度的数据分析。
数据存储
物联网系统数据存储量大;数据冷热分明,不同时效的数据查询需求不同;数据存储也要实现多种精度的数据存储,通常是按照时间维度统计。
时序数据库
物联网数据有个特点, 那就是每条数据都会带一个时间戳, 代表数据被采集的时间,所以物联网系统的数据是时间序列数据。
时序数据库尤其适合时间序列数据的存储,比如互联网运维领域常用的Prometheus就是基于leveldb引擎的时序数据库。顾名思义,时序数据库就是存放时序数据的数据库,支持时序数据的快速写入、持久化、多维度的聚合查询等功能。
最早的时序数据库应该是RRDTool(Round Robin Database Tool),由Tobias Oetiker 编写,后来世界各地的人对代码做出了各自贡献。
RRD存储数据的文件好似一个圆