InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。用于存储和分析时间序列数据的开源数据库。
适合存储设备性能、日志、物联网传感器等带时间戳的数据,其设计目标是实现分布式和水平伸缩扩展。
InfluxDB 包括用于存储和查询数据,在后台处理ETL或监视和警报目的,用户仪表板以及可视化和探索数据等的API。
InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。
类似的数据库有Elasticsearch、Graphite、IotDB等。
Apache IoTDB 是用Java语言编写的, 是专为物联网时序数据打造的数据库,提供数据采集、存储、分析的功能。IoTDB 提供端云一体化的解决方案,在云端,提供高性能的数据读写以及丰富的查询能力,针对物联网场景定制高效的目录组织结构,并与 Apache Hadoop、Spark、Flink 等大数据系统无缝打通;在边缘端,提供轻量化的 TsFile 管理能力,端上的数据写到本地 TsFile,并提供一定的基础查询能力,同时支持将 TsFile 数据同步到云端。
关系数据库 | 键值数据库 |
---|---|
单表列数上限: MySQL InnoDB 为1017列 | 可管理海量条时间序列 |
单表行数不易过多:小于1000万行 | 查询受限(表达能力低)如下: |
水平、垂直分表;分库 | 按时间维度的查询,按值维度的查询,多序列的时间对齐查询 |
基于关系数据库 | 基于键值数据库 | 原生时序数据库 | 轻量级时序数据库 |
---|---|---|---|
Timescale | opentsdbKairosDB | influxdb | IodDB |
基于PG开发的插件 | 基于Hbase/Cassandra | 基于LSM机制的时序库 | 工业领域千万条量级时间序列管理 |
时序数据自动分区 | 时序分区键 | 专属文件结构 | 单节点万亿数据点管理 |
查询计划做优化 | 定时任务构建索引 | 专属查询优化 | 单节点数十TB级时间序列数据管理 |
定制并行查询 | 支持Hadoop、Spark、Matlab、Grafana等多种生态 | ||
随着导入时间的增加导入速率不断下降 | 压缩比低,查询慢 | 长期历史数据查询性能下降 | 高效的数据持久化,丰富/低延迟的数据查询 |
总数据量 | 1500 亿 points |
---|---|
client | 10 |
group num | 10 |
device num | 100 |
sensor num | 100 |
每个 sensor | 1500 万 points |
encoding | RLE |
持续高压力写入测试。 |
elapseTime(h) | elapseRate(points/s) | accuTime(h) | accuRate(points/s) | |
---|---|---|---|---|
IoTDB | 25.5 | 1632058.82 | 13.2 | 3156988.07 |
InfluxDB | 38.7 | 1077684.22 | 25.8 | 1617748.51 |
测试共生成 1500 亿个 points,InfluxDB 总耗时 38.7 小时,IoTDB 总耗时 25.5 小时。测试 过程中,InfluxDB 和 IoTDB 都保持了平稳的插入速度,中途没有出现异常。
占磁盘空间(G) | 平均每个 point(B) | |
---|---|---|
InfluxDB | 627 | 4.49 |
IoTDB | 180 | 1.29 |
InfluxDB 占磁盘空间为 IoTDB 的 3.5 倍。
CPU usage(%) | 系统盘 wRate(M/s) | 数据盘 wRate(M/s) | net 流量(M/s) | |
---|---|---|---|---|
InfluxDB | 21.78 | 18.62 | 69.15 | 32.33 |
IoTDB | 15.29 | 27.58 | 69.01 | 37.15 |
对于系统盘(SSD)的 IO 使用 blktrace 工具做的更详细的统计。在 benchmark 平稳运行时, 采样 1 分钟的 IO 数据,统计结果如下:
Q2C 平均耗时 (ms) | D2C 占比 | BLKavg | IOPS | %util | |
---|---|---|---|---|---|
InfluxDB | 1.12 | 93.83% | 521 | 88 | 4.4% |
IoTDB | 0.33 | 96.09% | 207 | 1097 | 13.7% |
其中:
Q2C:平均每个 IO 请求所消耗的时间;
D2C:IO 请求在 driver 和硬件上所消耗的时间;
Q2C = Q2I + I2D + D2C
BLKavg:平均每个 IO 请求处理的 block 数量;
IOPS:平均每秒处理的 IO 请求数;
%util:IO 设备的繁忙程度。
从上面的监控数据可以看到,对于每个 IO 请求的处理效率,IoTDB 是要优于 InfluxDB;但是
IoTDB 每秒钟处理了大量的 IO 请求,IOPS 过高。
可以关注IotDB开发者博客:https://blog.csdn.net/qiaojialin
IotDB开发者的博客地址