工业物联网时序数据库 Apache IoTDB 中文演讲 张金瑞


- 数据库引擎:可与Flink、Spark集成
- 时序数据文件格式:提出了并原生支持TsFile
- 周边的配套分析引擎


一条时间序列是一列,不是一行

- 存储组 类似于关系型数据库的 database ,组织一大类数据。通过树型的结构定义具体的设备。
- 设备 不同的设备具备相同的属性
- 测点 每个设备都有若干个测点,每个测点都会形成一条时间序列。如图,比如燃油车vin1有两个测点,一个是速度、一个是油量 。
这种数据模型的优点: 支持海量测点管理

时间序列的列数没有上限,传统的关系型数据库属性数量有上限
适应工业场景多设备的复杂数据资产管理

其它时域数据库能很方便转化为IoTDB的模型,比如InfluxDB模型。

基于LSM trim 的思想,可以实现数据的乱序写入,
文件存储在乱序空间和顺讯空间两部分。能 实现底层文件跨空间合并为大文件。


存储引擎会生成一个一个的TsFile文件,这是TsFile的数据结构。
- 是一种针对时序数据优化的文件格式。
- 采用列式存储,并按照不同的层级对数据进行索引的建立
- 具有非常高的数据写入和压缩性能,能够非常友好地支持数据过滤以及聚合查询



工业环境网络质量难以保证----->数据无法完全保序到达。



- 宽表视图
- 设备表视图
- 测点表视

弥补时钟不同步造成影响可视化 / 分析

- 用户自定义函数:User Defined Function , 满足定制化计算需求。
- 内置11类UDF库,75个函数。

可以制定一种写入的规则。
- 是一种侦听数据变动的机制
- 配合用户自定义逻辑,可完成 告警、数据清洗、数据转发等功能。
可以通过select into 的语法将已经写入数据库的数据进行查询,并进行函数计算,获得的结果可以写回数据集,后续无需读原始数据,避免重复计算。提升了体验,降低用户使用难度。

对于固定时间窗口的、需要多次查询的聚合任务,可进行创建连续查询。 比如:自动化连续查询每10s内温度的最大值定期聚合,后期加速执行。


- 兼容MQTT这种物联网传输协议。
- kafka,从卡夫卡中进行数据消费,把消费到的数据写入到自己的db里存储和管理
- flink,为flink提供了sink功能,流式处理计算的结果很方便导出写入到iot db里

在使用IoT db的过程中,可以使用可视化的监控组件进行可视化监控,组件如Prometheus普罗米修斯,Grafana。
可以在 Grafana的dashboard里可以看到
iot db 运行过程中的各种指标,减少运维人员的工作强度和问题定位难度。

低延迟、高吞吐;

在原始数据查询和聚合查询中都具有很好的查询性能。

社区活跃度高

在轨道交通领域的应用
存储车辆监控数据,实现车辆不同种类故障的统计分析功能。

替换了OpenTSDB,应用在60多家电厂,减少运维成本。

存储了10万个国家级地面实况观测站数据,为新一代气象预报专业产品MICAPS提供了实况数据展示与分析能力。较上代MDFS系统提升了数百倍性能,支持了更长时间的实况数据存储与访问。目前该系统服务于每日全国天气预报业务。
解决了因观测站条件苛刻带来的数据乱序问题。

