InfluxDB 简介
InfluxDB 是用 Go 语言编写的一个开源分布式时序、事件和指标数据库,无需内部依赖。用于存储和剖析工夫序列数据的开源数据库。
适宜存储设备性能、日志、物联网传感器等带工夫戳的数据, 其设计指标是实现分布式和程度伸缩扩大。
InfluxDB 包含用于存储和查问数据,在后盾解决 ETL 或监督和警报目标,用户仪表板以及可视化和摸索数据等的 API。
InfluxDB 是一个由 InfluxData 开发的开源时序型数据。它由 Go 写成,着力于高性能地查问与存储时序型数据。InfluxDB 被广泛应用于存储系统的监控数据,IoT 行业的实时数据等场景。
相似的数据库有 Elasticsearch、Graphite、IotDB 等。
InfluxDB 长处
- 专为工夫序列数据编写的自定义高性能数据存储。TSM 引擎容许高摄取速度和数据压缩
- 齐全用 Go 语言编写。它编译成单个二进制文件,没有内部依赖项
- 简略,高性能的写入和查问 HTTP API
- 插件反对其余数据提取协定,如 Graphite,collectd 和 OpenTSDB
- 专为相似 SQL 的查询语言量身定制,可轻松查问聚合数据
- 标签容许对系列进行索引以实现疾速无效的查问
- 保留策略无效地主动使过期数据过期
- 间断查问主动计算聚合数据,以进步频繁查问的效率
InfluxDB 毛病
- InfluxDB 的开源版本只反对一个节点。
- 开源版本没有集群性能, 集群版本须要免费
- 存在前后版本兼容问题
- 存储引擎在变动
IotDB 简介
Apache IoTDB 是用 Java 语言编写的, 是专为物联网时序数据打造的数据库,提供数据采集、存储、剖析的性能。IoTDB 提供端云一体化的解决方案,在云端,提供高性能的数据读写以及丰盛的查问能力,针对物联网场景定制高效的目录组织构造,并与 Apache Hadoop、Spark、Flink 等大数据系统无缝买通;在边缘端,提供轻量化的 TsFile 治理能力,端上的数据写到本地 TsFile,并提供肯定的根底查问能力,同时反对将 TsFile 数据同步到云端。
IotDB 长处
- 国产我的项目, 当初国家鼎力推广自主研发, 国产化. IotDB 是清华自研工夫序列数据库,Apache 孵化我的项目,2014 年我的项目启动,2018 年 11 月 18 号 iotdb 正式进入 apache 孵化器, 成为中国高校首个进入 apache 孵化器的我的项目。
- 为用户提供数据收集、存储和剖析等特定的服务
- 轻量级的构造、高性能和可用的个性,以及与 Hadoop 和 Spark 生态的无缝集成,满足了工业 IoTDB 畛域中海量数据存储、高吞吐量数据写入和简单数据分析的需要。
- 灵便的部署策略。IoTDB 为用户提供了一个在云平台或终端设备上的一键装置工具,以及一个连贯云平台和终端上的数据的数据同步工具。
- 硬件成本低。IoTDB 能够达到很高的磁盘存储压缩比。
- 高效的目录构造。IoTDB 反对智能网络设备对简单工夫序列数据结构的高效组织,同类设施对工夫序列数据的组织,海量简单工夫序列数据目录的含糊搜寻策略。
- 高吞吐量读写。IoTDB 反对数以百万计的低功耗设施的强连贯数据拜访、高速数据读写,实用于上述智能网络设备和混合设施。
- 丰盛的查问语义。IoTDB 反对跨设施和测量的工夫序列数据的工夫对齐、工夫序列字段的计算 (频域转换) 和工夫维度的丰盛聚合函数反对。
- 学习老本非常低。IoTDB 反对相似 sql 的语言、JDBC 规范 API 和易于应用的导入 / 导出工具。
- 与先进的开放源码生态系统的无缝集成。IoTDB 反对剖析生态系统,如 Hadoop、Spark 和可视化工具(如 Grafana)。
IotDB 毛病
- 目前只有单节点版本, 不过集群版本马上要公布了
- IoTDB TsFile 的构造,目前仅有 java 版本,资源占用方面对边缘轻量级设施不敌对,限度了其在端 / 设施侧的利用。
- 存储上反对应用 HDFS 或 本地盘,通过应用 HDFS 来存储可保障存储层高可用,但计算层没有进一步的高可用保障。
关系数据库 VS 键值数据库
关系数据库 | 键值数据库 |
---|---|
单表列数下限: MySQL InnoDB 为 1017 列 | 可治理海量条工夫序列 |
单表行数不易过多: 小于 1000 万行 | 查问受限(表达能力低)如下: |
程度、垂直分表;分库 | 按工夫维度的查问, 按值维度的查问, 多序列的工夫对齐查问 |
时序数据库
基于关系数据库 | 基于键值数据库 | 原生时序数据库 | 轻量级时序数据库 |
---|---|---|---|
Timescale | opentsdbKairosDB | influxdb | IodDB |
基于 PG 开发的插件 | 基于 Hbase/Cassandra | 基于 LSM 机制的时序库 | 工业畛域千万条量级工夫序列治理 |
时序数据主动分区 | 时序分区键 | 专属文件构造 | 单节点万亿数据点治理 |
查问打算做优化 | 定时工作构建索引 | 专属查问优化 | 单节点数十 TB 级工夫序列数据管理 |
定制并行查问 | 反对 Hadoop、Spark、Matlab、Grafana 等多种生态 | ||
随着导入工夫的减少导入速率一直降落 | 压缩比低,查问慢 | 长期历史数据查问性能降落 | 高效的数据长久化, 丰盛 / 低提早的数据查问 |
InfluxDB 和 IotDB 性能测试
测试配置
总数据量 | 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 开发者的博客地址