认识InfluxDB
先说个让人破防的数据对比。
你有一万台设备,每台每秒上报一次温度。一天就是 8.64 亿条数据。你把它们塞进 MySQL,建了索引、分了表、调了参数,然后眼睁睁看着磁盘三天涨到 2TB,一条"查某台设备最近一小时的平均温度"要跑 8 秒。
同样的硬件,换成 InfluxDB,同样的查询是 毫秒级,磁盘占用只有零头。
这不是玄学,是"通用数据库硬扛时序数据"这件事本身就不对。InfluxDB 是 DB-Engines 上排名第一的时序数据库,累计下载量超过 10 亿次。2026 年 10 月,它刚刚发布 InfluxDB 3.12。
通用数据库能存任何数据,所以它对任何数据都不够快。时序数据的特点是"只追加、带时间戳、按时间窗口聚合"——一旦你承认这个特点,优化空间是数量级的。
什么是 InfluxDB
InfluxDB 是一个开源的时序数据库(Time Series Database,TSDB),也可以理解为广义上的流数据库。它专门为"像水流一样持续涌来"的数据设计:物联网传感器、服务器监控指标、工业遥测、金融行情、车联网轨迹、DevOps 可观测性数据。
它 2013 年就开源了,但真正脱胎换骨是 InfluxDB 3——用 Rust 从零重写,底层换成 Apache Arrow + DataFusion + Parquet 这套现代数据栈。
一句话定位:为"永不停歇的数据"而生的数据库。
注意它不是一个"带时间字段的 MySQL"。它从存储引擎、索引结构、压缩算法到查询优化器,全都是围绕时间戳重新设计的。
核心架构
InfluxDB 3 的性能来自四个设计决策:
- Rust 重写的内核:没有 GC 停顿,没有段错误,内存占用可预测。这是它能稳定扛住高吞吐写入的地基
- Apache Arrow 列式内存模型:数据在内存中按列存储,CPU 缓存友好,与其他 Arrow 生态工具(DuckDB、Polars、Spark)可以零拷贝交换
- DataFusion 查询引擎:SQL 引擎直接用 Apache DataFusion,天然支持 join、union、窗口函数。3.12 已升级到 DataFusion 52.5
- Parquet + 对象存储的存算分离:数据持久化成 Parquet 文件扔进对象存储,计算节点无状态。这就是官方说的 diskless(无盘)架构——可以完全不挂本地磁盘
数据模型
层级很朴素:database(库)→ table(表)→ column(列)。
如果你用过老版本,对应一下:database ≈ v2 的 bucket,table ≈ v1/v2 的 measurement。
列分四种:
- time:时间戳,纳秒精度
- tag:标签,带索引的元数据,比如
sensor_id、region。用来分组过滤,类似"维度" - field:字段,真正的数值,比如
temperature=23.5。不索引,类似"度量" - 类型支持 int64 / float64 / uint64 / bool / string
最容易踩的坑:InfluxDB 是 schema-on-write,你直接写数据它就自动建库建表,很爽。但 tag 列定义是不可变的——表一旦创建,tag 的顺序和结构就锁死了。所以别偷懒,头一批数据写进去之前想清楚哪些是 tag、哪些是 field。
InfluxDB 的核心特点
- 极高的写入吞吐:每秒数百万数据点,不需要你调索引、配分区
- 高压缩比长期存储:Parquet + 对象存储,全分辨率存几年也不肉疼,无需强制降采样
- 毫秒级实时查询:查询最新遥测数据支持亚秒级响应,够驱动实时调度和告警
- SQL 原生支持:基于 DataFusion 的完整 SQL,join、union、窗口函数都能写
- InfluxQL 兼容:从 v1 迁移过来的老代码不用重写
- Last Values Cache(LVC):缓存每个序列的最后 N 个值,"最新状态"类查询 10 毫秒内返回
- Distinct Values Cache(DVC):缓存指定列的去重值,元数据查询 30 毫秒内返回
- Processing Engine:数据库内直接跑 Python 插件,做数据转换和告警,不用另外搭一条流水线
- InfluxDB 3 Explorer:内置 Web UI,SQL 编辑器、看板、用户管理都在里面
- Flight SQL 支持:任何 Flight SQL 客户端都能连,Grafana 开箱即接
- Telegraf 生态:官方采集 Agent,300+ 插件,从 Redis 到 Modbus 到 MQTT 都能采
- 两个版本可选:开源免费的 Core,和商业版 Enterprise
谁在用 InfluxDB
西门子能源(Siemens Energy)—— 23000 个电池模块的预测性维护
西门子能源用 InfluxDB 监控 70 多个站点、23000 个电池模块,实时分析数十亿条高频传感器读数。全分辨率留存让他们的预测性维护模型有足够的历史数据可训练,设备故障在被发现之前就被预警。
对储能来说,"某个电芯三个月前开始的温度漂移"才是真正的故障信号。你要是提前降采样了,这个信号就没了。
LeoLabs —— 每秒 7000 行,追踪 27000 个太空目标
LeoLabs 运营全球相控阵雷达网,监控轨道上的 27000+ 个物体。他们的雷达站点每秒产生 7000 行数据、每天 6 亿行,覆盖发射功率、服务器指标、放大器状态、环境条件。
换算下来:约 1000 条告警规则,每条数据都要过一遍规则检查。普通数据库在这个量级早跪了,而他们的告警能在 30 秒内触发。
Enprove —— 每秒 35000 个值,查询快 6 倍
能源管理方案商 Enprove 用 InfluxDB 驱动实时看板,跟踪工厂、公用设施和各类站点的能耗表现。每秒摄入 35000+ 个值,查询速度比之前快 6 倍。
Epsilon3 —— NASA、Blue Origin、Axiom 都在用
航天任务执行平台 Epsilon3 把遥测监控嵌进了电子操作流程里,服务 NASA、Blue Origin、Axiom 等机构,支撑了 100 多次航天发射,包括国际空间站任务。操作员一边执行流程一边看实时遥测,步骤可以自动等待系统达到某个物理条件再推进。
Seadrill —— 省下 5500 万美元
海上钻井承包商 Seadrill 用 InfluxDB 替换了老旧的实时数据库和关系库。每座钻井平台通过卫星宽带以亚秒级更新推送 15000 到 22000 条时间序列。从"按日历保养"改成"按状态保养",资产全生命周期成本省了约 5500 万美元。
3.12 这次更新了什么
2026 年 10 月发布的 InfluxDB 3.12,主线是四个字:更能长了。官方博客的原话是——部署一旦跑起来,就会吸引来更多东西:几个月的回填数据、脉冲式写入、更多团队往同一个库里写。
批量导入快了约 3 倍
从 Parquet 批量导入,现在并行执行,能吃满 CPU。官方测试里导入时间下降 64%–70%。
顺带修了个权限上的别扭事:批量导入以前必须用 admin token,现在只需要目标库的 写权限。跑回填任务的凭证终于不用拿到整库的钥匙了。
分布式压缩(beta)
压缩(compaction)负责把刚写进来的数据在后台整理成高效的文件,查询才快。但写入量一大,压缩就跟不上,以前的唯一解法是换更大的机器。
3.12 把这个天花板掀了。压缩任务可以跑到集群里的每一个 compact 节点上,不再只有持有 compactor lease 的那个节点在干活。加节点就行,横向扩展。某个节点中途挂了,它的活会在下一个调度周期被重新分配。
默认是关的,老集群升级后行为完全不变。
按库强制 schema(--schema-mode explicit)
schema-on-write 上手很爽,但在多个团队共用的生产库里是坑:某个服务把字段名拼错了,或者多写了一列,这个错误就悄悄变成了 schema 的一部分,所有查这个库的人都要绕着走。
3.12 让你可以在建库时锁死 schema:
influxdb3 create database --schema-mode explicit之后凡是写入了没声明过的表和列,直接拒绝。脏数据在写入那一刻就被拦下,而不是等它上了仪表盘再回头查。
注意三点:默认还是 implicit(schema-on-write);库建完之后 schema mode 改不了;Core 不支持,会返回 400。
RBAC 用户认证正式可用(GA)
用户名密码登录、单点登录(OAuth)、基于角色的访问控制在 Enterprise 里 GA 了,内置 Admin / Auditor / Member 三种角色。以前权限管理是"追着一堆 token 跑",现在按人按角色统一治理。
默认是关的(--user-auth-type 默认 none),现有 token 工作流不受影响。
Processing Engine 独立进程
以前自定义 Python 插件和数据库跑在一个进程里,插件写崩了可能拖垮数据库。现在 Processing Engine 可以跑成独立进程,一次有问题的插件更新被隔离在里面,数据库继续运行。
顺带 WAL trigger 的范围也扩大了:写入到任意一个 ingest 节点的数据,都会在 process 节点上触发,不再只在你写入的那个节点触发。
Explorer 1.11
新增六种可视化:面积图、单值、仪表盘、饼图、散点图、排行榜。SQL 编辑器里加了 EXPLAIN ANALYZE,能直接看查询在干什么。
六张图听起来没什么,但对一个天天盯时序曲线的团队来说,这意味着"不用再为了一个仪表盘去 Grafana 里折腾半天"。
初体验:10 分钟跑起来
装 Core 就两条路。
方式一:Docker(推荐先试这个)
docker run -it --rm --name influxdb3-core \
-p 8181:8181 \
-v "$PWD/influxdb3-data":/var/lib/influxdb3 \
influxdb:3-core \
influxdb3 serve \
--node-id my-node \
--object-store file \
--data-dir /var/lib/influxdb3方式二:本地安装
macOS / Linux 用官方脚本:
curl -O https://www.influxdata.com/d/install_influxdb.sh
sh install_influxdb.sh然后启动:
influxdb3 serve \
--node-id host01 \
--object-store file \
--data-dir ~/.influxdb3开发机上你可以直接敲
influxdb3不带任何参数,它会自动生成 node-id、用本地文件存储、数据目录指向~/.influxdb。但生产环境别这么干,老老实实把参数写全。
第一步:建 admin token
服务起来了,另开一个终端:
influxdb3 create token --admin返回的 token 字符串只显示一次,存好,之后查不回来。然后设成环境变量:
export INFLUXDB3_AUTH_TOKEN=你的token安全提醒(官方文档里加粗的那种):在第一个 admin token 创建出来之前,
/api/v3/configure/token/admin接口接受未认证请求,而服务默认监听所有网卡。这个窗口期里任何能访问到端口的人都能抢走 operator token,然后用 Processing Engine 在你的机器上跑代码。要自动化部署,直接用预配置 admin token 启动。
第二步:写数据
InfluxDB 用的是 Line Protocol(行协议),人肉可读:
表名,标签键=标签值 字段键=字段值 时间戳来个真实点的例子——机房温湿度:
influxdb3 write \
--database sensors \
'home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1791878400
home,room=Kitchen temp=23.0,hum=36.2,co=1i 1791878400
home,room=Kitchen temp=23.3,hum=36.9,co=18i 1791914400'不用先建库建表,写完 schema 自动就有了。
用 HTTP API 也行:
curl -X POST "http://localhost:8181/api/v3/write_lp?db=sensors&precision=second" \
--header "Authorization: Bearer $INFLUXDB3_AUTH_TOKEN" \
--data-raw 'home,room=Kitchen temp=23.1,hum=36.6,co=22i 1791918000'第三步:查数据
直接写 SQL:
influxdb3 query \
--database sensors \
"SELECT * FROM home ORDER BY time DESC LIMIT 10"窗口聚合,比如每 3 小时的平均湿度:
influxdb3 query \
--database sensors \
"SELECT
date_bin(INTERVAL '3 hours', time) AS window_start,
room,
AVG(hum) AS avg_humidity
FROM home
WHERE time >= now() - INTERVAL '7 days'
GROUP BY window_start, room
ORDER BY window_start"老 InfluxQL 用户加个 --language influxql 就行。
第四步:打开 Web UI
浏览器访问 http://localhost:8181,Explorer 界面在里面,写 SQL、建看板、管用户都在这一处。
Core 还是 Enterprise
这是最常被问的,直接给结论:
| 维度 | InfluxDB 3 Core | InfluxDB 3 Enterprise |
|---|---|---|
| 协议 | 开源(MIT/Apache 系) | 商业授权 |
| 定位 | 实时监控 + 近期数据 | 近期 + 历史全量分析 |
| 查询时间范围 | 约 72 小时上限 | 无限制 |
| 分布式压缩 | 不支持 | 支持(3.12 beta) |
| schema 强制 | 不支持(返回 400) | 支持 |
| RBAC / 用户认证 | 不支持 | 支持(3.12 GA) |
| 高可用 / 只读副本 | 不支持 | 支持 |
| 备份与恢复 | 不支持 | 支持(全量/增量) |
| 行级删除 | 不支持 | 支持 |
说实话,Core 那个 72 小时限制挺劝退的——它是官方刻意划的线,为的是把商业版卖出去。但换个角度想:如果你只是做本地监控、原型验证、或者把 InfluxDB 当"最近数据的缓存层"(历史数据落 Parquet 交给 DuckDB/Spark 分析),Core 完全够用,还免费。
进阶
InfluxDB 值得知道的,不只是"时序数据库"这四个字。
它的技术路线其实很有代表性:用 Rust 重写内核 + Arrow 做内存格式 + DataFusion 做查询引擎 + Parquet 做存储格式 + 对象存储做底座。这一整套不是 InfluxDB 自己造的,而是把开源数据栈的现代组件拼在了一起。RisingWave、GreptimeDB 这些新秀走的是同一条路。
3.12 这一版的信号也很清楚:时序数据库的下半场,拼的不是"能写多快",而是**"能不能一起长大"**。导入能不能并行、压缩能不能横向扩、schema 能不能管住、权限能不能治理——这些"长大之后才痛"的问题,才是企业级场景掏钱的理由。
如果你手上有传感器、有监控指标、有每秒都在涨的数据,花十分钟 docker run 一下,比看十篇文章管用。
更多开源技术干货和学习资料,关注公众号「遇码」,领取专属福利。
