为什么要用时序数据库
首先时序数据库是一种针对时序数据高度优化的垂直型数据库,在各行各业有着广泛的应用。
通常情况设备产生的过程数据有一个非常明显的特点就是和时间有关,一般来说,工业数据、设备数据的典型特点包括
- 产生频率快
以常见数据采集、发送数据为例,分为高低优先级数据,5秒,到每天一个EMS单采集点会发送17280 - 严重依赖采集时间
设备数据每一条数据要求对应唯一时间 - 测点多、信息量大,但结构相对简单
常规的实时监测系统均有成千上万的监测点,监测点每秒钟都产生数据,每天产生大量的数据
比如,现有监测点共有2000个,以后会随着研发设备类型的增加,监测点也会增加。发送数据格式相对较为简单主要以格式发送。
估算数据量:5000台设备17280条数据 = 86400000条数据
上报数据大小4kb
5000个设备数据大小为4kb 86400000= 345,600,000/1024/1024=330(仅供参考,未考虑压缩情况) - 抵达的数据几乎总是作为新条目被记录
- 数据通常按照时间顺序抵达
- 时间是一个主坐标轴(既可以是规则的时间间隔,也可以是不规则的)
- 基本不修改已有数据
mysql与时序数据库对比
- 时序数据库读取、插入数据优于mysql
- 阿里巴巴《Java 开发手册》提出单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表,mysql数据行数大于2000万后性能会有所下降,所以不适合该场景
综上所述,使用传统的数据库不满足以上条件,所以引入运势而生的时序数据库,存储海量数据。且做到分析过去的变化,监测现在的变化,以及预测未来将如何变化。
各维度对比
对比IotDB与InfluxDB(主要是阿里云提供的服务对比)
目前阿里云提供influxDB最新版本为:1.8.9
对比维度 | IOT | influxDB |
---|---|---|
运维 | 需私有化部署,保证服务稳定性 | 1.支持集群部署; 2.阿里云支持InfluxDB®版本,提供了图形化的控制台,方便进行基本的管理操作,避免学习InfluxDB复杂的基本管理命令 3.influxDB支持国外云服务部署 |
可靠性 | 1.0.12以上支持集群部署;2.数据库安全问题需自行实现 | 阿里云提供对应服务 |
易用性 | 类SQL查询 | 1.0 支持类SQL查询,2.0开始influxSQL |
兼容性-emqx | 不支持桥接,需手动编写代码完成功能 | 支持直接桥接,emq数据直接入库 |
DBEngines排名 | 排名19 | 排名第1 |
排名截图
排名链接:DB排名
结论
在大量数据的情况下,iotDB性能方面有高于influxDB,易用性持平,但是从运维和可靠性方面分析,influxDB是优于iotDB。
1.可以自行搭建或购买云influxDB云服务与自购服务器搭建iotDB集群费用相差不大,但是提供的云服务可以有效减少运维成本和不可靠因素;
2.Emqx支持数据持久化,直接桥接到influxDB,尚未支持iotDB,数据直接桥接到influxDB,可以有效减少我们服务的负载;
3.DBEngines排名中,influxDB稳坐第一的位置,iotDB虽说是增长的趋势,但是排名还是略低一些,排名19
综上所述,物联网落地方案千差万别,不像传统mysql、Oracle使用场景是经过多年验证的、可靠的选型;选择某一个时序数据库数据库需要结合团队运维、开发成本、数据可靠性、场景适合什么数据库等多条件综合分析,而不是为了用技术而用技术,上面只简单的说明了iotDB,但是也需要持续关注国产数据库发展,如TDengine、DolphinDB优秀的国产时序数据库;也要关注influxDB2.x版本更新提供的新功能与特性。也许在项目后续的版本迭代中选择与各位大佬的项目更契合的数据库与新的版本。
后续会补上基本influxDB基本使用与EMQ的常用实现方案