物联网系统中,需要实时处理的数据可通过队列送入流处理引擎;不需要实时处理的数据,用于离线分析或数据挖掘,需要先存储起来。物联网系统的数据存储的方式很多,要根据实际场景来选择。
物理网系统各种可能的存储选择
物联网的数据主要是通过传感器采集, 经过解析和清洗, 以结构化的格式进行存储。在数据量不大的情况下, 用MySQL等关系数据库就可以满足我们的需求。如果经常有很多报表统计的需要,也可以使用clickhouse、greenplum等nosql数据库。
物联网系统的数据存在特殊性,不同于传统互联网应用,除了互联网应用常用的数据库,可以结合物联网系统的数据特点,设计专门的数据存储系统。
数据写入
物联网系统的数据写入具有平稳、持续、高并发高吞吐的特点;通常写多读少,实时写入传感器最近生成的数据,几乎没有数据更新的操作。
数据查询和分析
数据存储
物联网系统数据存储量大;数据冷热分明,不同时效的数据查询需求不同;数据存储也要实现多种精度的数据存储,通常是按照时间维度统计。
物联网数据有个特点, 那就是每条数据都会带一个时间戳, 代表数据被采集的时间,所以物联网系统的数据是时间序列数据。
时序数据库尤其适合时间序列数据的存储,比如互联网运维领域常用的Prometheus就是基于leveldb引擎的时序数据库。顾名思义,时序数据库就是存放时序数据的数据库,支持时序数据的快速写入、持久化、多维度的聚合查询等功能。
最早的时序数据库应该是RRDTool(Round Robin Database Tool),由Tobias Oetiker 编写,后来世界各地的人对代码做出了各自贡献。
RRD存储数据的文件好似一个圆
RRDTool数据库由一个固定大小的数据文件来存放数据,此数据库不会像传统数据库一样为随着数据的增多而文件的大小也在增加,RRDTool在创建好后其文件大小就固定了。
可以将RRDTool的数据文件看成一个圆,圆的众多直径把圆划分成一个个扇形,每个扇形就是可以存数据的槽位,每个槽位上被打上了一个时间戳。
圆心上有一个指针,随着时间的流逝,取回数据后,指针会负责把数据填充在相应的槽位上;当指针转了360度后,最开始的数据就会被覆盖,就这样RRDTool循环填充着数据。
在RRDTool数据库之后,又出现了很多开源数据库。
历史上发布的开源时序数据库:
•1999/07/16 RRDTool First release
•2009/12/30 Graphite 0.9.5
•2011/12/23 OpenTSDB 1.0.0
•2013/05/24 KairosDB 1.0.0-beta
•2013/10/24 InfluxDB 0.0.1
•2014/08/25 Heroic 0.3.0
•2017/03/27 TimescaleDB 0.0.1-beta
从2016年以后,随着物联网市场的发展,时序数据库也跟着火了起来。2016年7月,百度云在其天工物联网平台上发布了国内首个多租户的分布式时序数据库产品TSDB;2017年2月Facebook开源了Beringei时序数据库;2017年4月基于PostgreSQL打造的时序数据库TimeScaleDB也开源了。
按照存储的底层技术,大致可以将时序数据库大致分为三类:
时序数据是基于时间的数据。在以时间为轴的坐标系中将这些数据点连成线,可以做成多维度报表,揭示历史数据的趋势性、规律性、异常性;也可以做大数据分析,机器学习,实现对未来的预测和预警。时序数据库为时序数据的归纳和分析提供了存储基础,在物联网蓬勃发展的今天,必将得到越来越广泛的应用。