非物联网场景下的大数据应用通常是从业务库比如关系数据库同步数据到数仓,然后进行离线分析处理和展示。而在实时场景中,实时数据通常借助中间件消息系统如Kafka等转储,然后通过实时处理引擎如Spark,Flink等处理和展示。目前的技术之所以能够胜任上述场景,一是传统的关系数据库系统足够强大,能够支撑高并发读写操作,二是网络、硬件等基础设施足够实惠且软件系统集群化足够便利,然而在物联网场景下,上述便利并不是那么理所当然,比如风力发电机,一个风机有120-510个传感器,采集频率高达50Hz,就是每个传感器1秒50个数据点采集峰值,假设一个风电公司有2万个风机,那么每秒就是5亿个时序指标点的数据。再比如一台智能汽车按照每台300颗传感器,假设一个城市有100万台运行中的智能汽车,按照平均1Hz的采集频率,每秒就有3亿的时序数据记录!实际中的传感器采集频率远高于1Hz。
这跟非物联网场景下的大数据应用的区别可以总结为以下几点:
1. 数据高速写入,属于写远大于读的场景,基于B+树索引结构的关系数据库系统会导致随机读写的情况,限制了系统读写吞吐量。
2. 数据量大,而且相同传感器产生的数据类型一样,这自然需要基于列存储,并且支持不同列适用不同压缩格式的系统。基于行存储的系统无法优化存储,降低存储空间。
3. 物联网场景下的数据通过弱网发送数据,网络带宽本身有限,这会造成数据的延迟、乱序以及因为设备环境异常造成的空数据等异常数据发生。
4. 为减轻数据传输延迟和数据中心的计算压力,物联网设备通常支持边缘计算,但边缘设备的硬件资源有限,这就要求本地存储系统足够轻量。
5. 物联网数据量大,转移到数据中心要求便捷高效,能够对接现有的大数据处理技术生态。
6. 数据查询支持多维度聚合,降采样,时序分割等。
放眼望去,IoTDB是目前最佳选项,不仅能够满足上述要求,而且针对物联网模型做了定制化,提供 JDBC 访问方式,支持边云一体化部署,实现了开放的 TsFile 存储格式,设备模型简单易理解。存储支持本地存储和Hadoop File system,并提供多种 Connector,与现有大数据生态无缝打通。
Apache IoTDB是一个开源物联网原生数据库,旨在满足大规模物联网和工业物联网(IoT和IIoT)应用对数据、存储和分析的严苛要求。该项目最早是由清华大学大数据系统软件团队研发,并于2018年11月进入捐赠给Apache,进行了为期1年10个月的孵化,2020年9月16日,经Apache董事会表决,Apache IoTDB正式晋升为顶级项目。
IoTDB 功能特点
(1)开放的架构:IoTDB 架构图如下所示,采用存储和查询分离的架构,将底层存储开放给上层应用,一份数据既支