InfluxDB

关注
义项:时序数据库
InfluxDB

InfluxDB 是 InfluxData 开发的开源时序数据库,用 Go 语言编写,专门用于存储、检索和分析带时间戳的数据[1]。它面向高并发写入与实时查询场景,常用于运维监控、应用程序指标与物联网传感器数据的采集分析[1]。其早期版本是 TICK 技术栈的存储组件[1],2025 年推出的 3 系产品改用 Rust 重写引擎并基于列式开放标准构建[2]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

InfluxDB 是一种专门针对时间戳数据设计的数据库,其数据模型以时间为主键,围绕测量名称、标签集、字段集和时间戳组织一条记录[3]。在数据模型里,measurement 类似关系型数据库中的表,tag 是带索引的键值对,field 是不带索引的键值对,同一 measurement 可容纳多条时间序列。它用于应对高写入负载和查询负载,通常作为 DevOps 监控、应用指标、物联网传感器数据及实时分析等场景的后端存储[1]。

原理

写入采用行协议(Line Protocol),一行即一条记录,由测量名称、标签集、字段集和以纳秒为单位的 Unix 时间戳组成,可通过 HTTP、TCP 或 UDP 传输[3]。查询侧早期使用类 SQL 的 InfluxQL,2.0 版引入函数式的 Flux 查询语言,以管道方式串联操作[3]。

存储层早期使用 TSM(Time-Structured Merge tree)引擎,属于面向时序数据的 LSM 树变体:写入先进入预写日志与内存缓存,后台压缩合并为按时间排序的只读文件,数据按分片(shard)按时间区间组织[3]。TSM 对时间戳采用增量编码、对浮点数采用异或压缩,以降低存储占用[4]。为应对高基数标签,后续引入 TSI 索引,把标签倒排索引放到磁盘以控制内存占用[4]。3 系引擎改用 FDAP 组合,即 Apache Arrow、DataFusion、Parquet 与 Flight,采用列式存储,并支持以对象存储作为唯一持久层[5]。

发展历程

2012 年,Paul Dix 与 Todd Persen 创立 Errplane,最初做实时指标与监控的 SaaS 产品,其后台以 Cassandra 持久化、Redis 做实时索引[6]。2013 年,团队在 Berlin 的 Monitorama 会议上确认各家都在重复自建时序存储,遂转向开源时序数据库方向,InfluxDB 由此诞生并于同年开放源代码。2014 年底,公司获得 810 万美元 A 轮融资。

2015 年前后,InfluxDB 引入自研的 TSM 存储引擎;2016 年 9 月发布 1.0 正式版及商业版 InfluxDB Enterprise[4][7]。围绕它形成的 TICK 技术栈包括数据采集器 Telegraf、可视化与管理工具 Chronograf 以及流式处理引擎 Kapacitor[8]。2019 年发布 2.0 版,引入 Flux 语言,并把数据组织单位从 database 改为 bucket[4][9]。2020 年,公司公布 IOx 项目,即改用 Rust 与 Arrow 重写核心;2023 年该引擎以 InfluxDB 3.0 的产品形态发布[4]。2025 年 4 月,InfluxDB 3 Core 与 InfluxDB 3 Enterprise 正式发布,Core 以 MIT/Apache 2 双许可证开源[2]。

关于提出时间,InfluxData 方面在回顾文章中把 2013 年 9 月视为项目起点,2013 年 11 月为首次提交的常见说法,本词条采用 2013 年这一年份。

应用

它的典型用途是运维与基础设施监控。例如把服务器 CPU 使用率按固定间隔写入,再周期性查询近段时间的均值,并据此配置告警规则。物联网场景同样常见,如机械设备振动频率、农田湿度温度等连续读数的采集与统计。此外也用于应用程序性能指标、网络监控与工业自动化等领域[10]。

生态上,它可与 Grafana 等可视化工具对接,用于构建仪表盘与告警;官方提供多种语言的客户端库,并支持 Graphite、collectd、OpenTSDB 等写入协议[10][1]。3 系产品内置 Python 处理引擎,可在数据写入或定时触发时执行转换与告警逻辑,无需外挂 ETL 管道[2]。

局限

时序数据的时间维度查询方式与关系型模型存在差异,2.0 版改用 Flux 后,交互式命令行不再支持 SQL 语法,习惯关系型数据库的用户需要重新适应[9]。同时 2.x 的接口与 1.x 不兼容,已有写入组件可能无法直接对接[9]。

标签基数会显著影响开销。以 request_id 这类取值极多的字段作标签,会使索引规模迅速膨胀;高基数数据集在早期版本中查询更慢、计算成本更高[4][11]。此外,它对关联查询的支持有限,不适合当作关系型数据库使用,也不适合存放体积很大的单条载荷[4]。有对比研究指出,其聚合与降采样能力可用,但编码压缩方式由数据类型决定,用户无法自选编码方法[12]。

参见

  • 时序数据库 —— 本词条所属的数据库类别,以时间为主键存储带时间戳数据。

  • InfluxQL —— InfluxDB 早期使用的类 SQL 查询语言。

  • Flux —— InfluxDB 2.0 起引入的函数式查询语言。

  • Telegraf —— InfluxData 提供的指标采集代理,属于 TICK 技术栈组件。

  • Grafana —— 常与 InfluxDB 搭配使用的数据可视化与监控工具。

  • Apache Arrow —— InfluxDB 3 引擎采用的列式内存格式之一。

参考资料

  1. InfluxDB OSS v1 文档 [引用日期2026-10-14]
  2. influxdata.com 上的网页 [引用日期2026-10-14]
  3. InfluxDB Time-Series Database [引用日期2026-10-14]
  4. InfluxDB — Time-Series Database in Go (and the Rust pivot) [引用日期2026-10-14]
  5. influxdata.com 上的网页 [引用日期2026-10-14]
  6. It's About Time for InfluxData - Off the Wire Press Releases [引用日期2026-10-14]
  7. InfluxDB 1.0 GA 版本发布:回顾与展望 [引用日期2026-10-14]
  8. title: "InfluxDB" [引用日期2026-10-14]
  9. influxdb 1 [引用日期2026-10-14]
  10. InfluxDB:高性能时序数据库的全面介绍 [引用日期2026-10-14]
  11. InfluxDays Recap – Paul Dix and the Journey of InfluxDB [引用日期2026-10-14]
  12. TSDB-Comparison [引用日期2026-10-14]
词条评价
词条统计

浏览次数:1 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T22:08:13Z

历史版本

本条目引用的词条
时序数据库 InfluxQL Flux Telegraf Grafana Apache Arrow