InfluxDB

InfluxDB 架构图

InfluxDB

InfluxDB是一个由InfluxData开发的开源时序型数据库。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,它还是没有额外依赖的开源时序数据库,用于记录metrics、events,进行数据分析。

背景特性

存储引擎的演进

尽管InfluxDB自发布以来历时三年多,其存储引擎的技术架构已经做过几次重大的改动,以下将简要介绍一下InfluxDB的存储引擎演进的过程。并且InfluxDB的集群版已在0.12版就不再开源。

  • 版本0.9.0之前:基于LevelDBLSMTree方案

  • 版本0.9.0 ~ 0.9.4:基于BoltDBmmap COW B+tree方案

  • 版本0.9.5 ~ 1.2:基于自研的WAL + TSMFile方案(TSMFile方案是0.9.6版本正式启用,0.9.5只是提供了原型)

  • 版本1.3 ~至今:基于自研的WAL + TSMFile + TSIFile方案

InfluxDB的存储引擎先后尝试过包括LevelDBBoltDB在内的多种方案。但是对于InfluxDB的下述诉求终不能完美地支持:

  • 时序数据在降采样后会存在大批量的数据删除=> LevelDBLSMTree删除代价过高。

  • 单机环境存放大量数据时不能占用过多文件句柄=> LevelDB会随着时间增长产生大量小文件。

  • 大数据场景下写吞吐量要跟得上=> BoltDBB+tree写操作吞吐量成瓶颈

  • 存储需具备良好的压缩性能=> BoltDB不支持压缩

基于上述痛点,InfluxDB团队决定自己做一个存储引擎的实现。