Featured image of post 时序数据库三剑客:InfluxDB 1.x/2.x、TimescaleDB、TDengine 部署实战

时序数据库三剑客:InfluxDB 1.x/2.x、TimescaleDB、TDengine 部署实战

InfluxDB 1.x 数据保留策略与高可用(influxdb-relay)、TimescaleDB hypertable 超表、TDengine 超级表与客户端——把"传感器数据"三类主流存储方案在 Docker 里的部署和实战一次性收齐

IoT 时代传感器每秒产生几十个数据点(温度、压力、位置),传统 MySQL 一行一行写——索引碎片、表膨胀、性能崩盘。时序数据库(Time Series Database) 就是为这种"高频写入、范围查询、降采样分析"场景设计的。这篇文章把三类主流的时序数据库(InfluxDB 1.x/2.xTimescaleDBTDengine)在 Docker 里的部署、配置、查询实战一次性收齐。

阅读对象:IoT / 监控 / 金融行情 / DevOps Metrics 等"时序数据"场景的工程师;正在选型时序数据库的架构师。 覆盖范围:InfluxDB 1.x 数据保留策略、用户授权、influxdb-relay 高可用;InfluxDB 2.x token + bucket 模式;TimescaleDB hypertable 实战(见 PostgreSQL 篇);TDengine 2.0/3.3 客户端、超级表、taos.cfg。

一、时序数据库选型速查

数据库类型写入吞吐查询语言适合
InfluxDB 1.x纯时序InfluxQL(类 SQL)监控指标(Prometheus 替代)
InfluxDB 2.x纯时序 + FluxInfluxQL + Flux新项目、与 Grafana 集成
TimescaleDBPG 扩展SQL关系+时序混合场景
TDengine国产自研极高SQL工业 IoT、千万级设备

核心区别

  • InfluxDB:写快、读强、生态成熟(Telegraf + Grafana),但集群版不开源
  • TimescaleDB:复用 PostgreSQL,关系+时序一把抓,单机性能中等
  • TDengine:国产、写入性能逆天、硬件资源占用低,但生态相对小

二、InfluxDB 1.x

2.1 启动

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
docker pull influxdb:1.8.0-alpine

# 导出默认配置
docker run --rm influxdb:1.8.0-alpine influxd config > /home/docker/influxdb/conf/influxdb.conf

# 启动
docker run -d --name influxdb \
  -p 8086:8086 \
  -v /home/docker/influxdb/conf/influxdb.conf:/etc/influxdb/influxdb.conf:ro \
  -v /home/docker/influxdb/data:/var/lib/influxdb \
  --restart=always \
  influxdb:1.8.0-alpine -config /etc/influxdb/influxdb.conf

2.2 初始化用户和库

1
2
3
4
5
6
docker exec -it influxdb /bin/bash

> create user "<your-org>" with password '{{REDACTED}}'
> show users
> create database safety_dev
> show databases

2.3 数据保留策略(RP)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 进入 influx CLI
docker exec -it influxdb influx

# 创建保留 30 天的策略
create retention policy "rp-day-30" on "mydb" duration 30d replication 1 default

# 改保留期
alter retention policy "rp-day-30" on "mydb" duration 20d replication 1 default

# 查看
show retention policies on "mydb"

2.4 批量建库脚本

1
2
3
4
5
6
cat << 'EOF' | docker exec -i influxdb influx
create user "<your-org>" with password '{{REDACTED}}';
create database safety_dev;
create retention policy "rp-day-365" on "safety_dev" duration 365d replication 1 default;
GRANT ALL PRIVILEGES ON "safety_dev" TO "<your-org>";
EOF

2.5 写入与查询

1
2
3
4
5
6
7
8
# 写入(tag + field + time)
insert cpu_usage,ip=192.168.0.1 value=30
insert temperature,iccid=1119264005543987 value="23.6"

# 查
select * from temperature tz('Asia/Shanghai')
delete from temperature
show field keys from temperature

Why 没 into? InfluxDB 1.x 的 insert 语句不写 into(写 into 是 SQL 习惯)。measurement 名是第一个 token(这里是 cpu_usage / temperature)。

2.6 高可用:influxdb-relay

influxdb-relay 是 InfluxData 官方的高可用代理:写入请求复制到多台 InfluxDB,查询自动选择可用节点。

1
2
3
4
git clone https://github.com/influxdata/influxdb-relay.git
cd influxdb-relay
git checkout tags/v1.8.0
docker build -t my-influxdb-relay:v1.8.0 .

relay.toml

1
2
3
4
5
6
7
8
[[http]]
name = "relay-http"
bind-addr = "0.0.0.0:8096"
output = [
  { name = "influxdb-node1", location = "http://node1.internal:8086" },
  { name = "influxdb-node2", location = "http://node2.internal:8086" },
  { name = "influxdb-node3", location = "http://node3.internal:8086" },
]

启动:

1
2
3
4
5
6
docker run -d \
  --name=influxdb-relay \
  -p 8096:8096 \
  -v /path/to/relay.toml:/etc/influxdb-relay.toml \
  --network=influxdb_network \
  my-influxdb-relay:v1.8.0 -config /etc/influxdb-relay.toml

架构:应用 → relay(写入广播到 3 个 InfluxDB + 查询选择可用节点)→ InfluxDB 集群。不是真正的分布式(每台都是全量数据),适合"读多写少 + 高可用"场景。


三、InfluxDB 2.x

2.x 引入Token 认证 + Bucket 模型,API 与 1.x 不完全兼容。

2.1 启动

1
2
3
4
5
6
docker pull influxdb:2.7-alpine
docker run -d --name influxdb2 \
  -p 8086:8086 \
  -v /home/docker/influxdb2/data:/var/lib/influxdb2 \
  --restart=always \
  influxdb:2.7-alpine

2.2 Token 认证

1
2
3
4
5
6
7
8
9
# 首次启动进入 UI 初始化(http://<host>:8086)
# 创建 org、bucket、token

# Spring Boot 集成
influx2:
  url: http://internal.example.com:8086
  token: <your_token>
  org: my-org
  bucket: my-bucket

Spring Boot 集成 org.springframework.boot:spring-boot-starter-data-influxdb(2.x 专属 starter)。


四、TimescaleDB

TimescaleDB 是 PostgreSQL 的时序扩展,对用户看就是一张"超表(hypertable)",底层自动按时间分块(chunk)。见 PostgreSQL Docker 实战 篇,本节只列关键点。

1
2
3
4
5
-- 启用扩展
CREATE EXTENSION IF NOT EXISTS timescaledb;

-- 转超表
SELECT create_hypertable('sensor_data', 'time');

优势

  • 复用 PG 的 SQL、事务、备份工具
  • 关系数据 + 时序数据一把抓
  • 连续聚合(Continuous Aggregate)自动降采样

劣势

  • 单机写入性能不如 InfluxDB / TDengine
  • PG 本身的运维成本(vacuum、autovacuum 调优)

五、TDengine(国产时序库)

TDengine 是涛思数据(TAOS Data)2017 年开源的时序数据库,写入性能是 InfluxDB 的 5-10 倍,硬件资源占用 1/5~1/10。国产化场景的优选

5.1 启动

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
docker pull tdengine/tdengine:2.0.18.0
docker pull tdengine/tdengine:3.3.6.13

mkdir -p /home/docker/taos/{conf,lib,log,data}

# 2.0 docker-compose
cat << 'EOF' > /home/docker/taos/docker-compose.yml
version: '3'
services:
  tdengine:
    image: tdengine/tdengine:2.0.18.0
    container_name: tdengine
    volumes:
      - /home/docker/taos/conf:/etc/taos
      - /home/docker/taos/lib:/var/lib/taos
      - /home/docker/taos/log:/var/log/taos
    ports:
      - "6030:6030"
      - "6035:6035"
      - "6041:6041"
      - "6030-6040:6030-6040/udp"
    restart: always
EOF

docker-compose -f /home/docker/taos/docker-compose.yml up -d

# 3.x 启动
docker run -tid \
  --name tdengine \
  --restart=always \
  --hostname="worker9" \
  -v /data/docker/taos/log:/var/log/taos \
  -v /data/docker/taos/data:/var/lib/taos \
  -p 6030-6060:6030-6060 \
  -p 6030-6060:6030-6060/udp \
  tdengine/tdengine:3.3.6.13

5.2 端口说明

端口协议作用
6030TCP原生客户端
6035TCP启动服务
6041TCP监控/管理
6030-6040UDP多播(集群内)

5.3 客户端

1
2
3
4
5
6
7
8
# Windows 客户端
# https://www.taosdata.com/cn/getting-started/

# 可视化工具 Taos.Studio
# https://github.com/maikebing/Taos.Studio/releases

# 配置文件 taos.cfg(C:\TDengine\cfg\taos.cfg)
# firstEp                   <server_ip>:6030

命令行进入 taos shell:

1
2
taos
# 默认用户名 root,密码 taosdata

5.4 建库建表

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- 创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name [KEEP keep] [UPDATE 1];
CREATE DATABASE zzkde;

-- 创建超级表(模板)
CREATE STABLE history (
  ts timestamp,
  src binary(200),
  ch0 binary(20),
  ch1 binary(20),
  ...
  ch50 binary(20)
) TAGS (sn binary(20), group_id int);

-- 用超级表做模板创建子表
CREATE TABLE d1000 USING history TAGS ("1000", 2);

-- 插入(自动建表)
INSERT INTO d1001 USING history TAGS ("1001", 2) VALUES (now, 1, 1, 1, ...);

-- 插入已有表
INSERT INTO d1000 VALUES ('2021-03-12 11:26:02', '...', ...);

**超级表(STable)**是 TDengine 的核心抽象:1 张 STable = 1 类设备,N 张子表 = N 个设备实例。每张子表自动继承 STable 的 schema 和 tag。

5.5 关键参数调优

/etc/taos/taos.cfg

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 客户端 FQDN(集群必须)
fqdn                  worker9.internal

# 监听所有网卡
serverPort            6030

# 最小存储天数
keep                  3650

# 数据块大小(设备多时调大)
cacheNumOfBlocks      6
cacheBlockSize        1024

六、InfluxDB vs TimescaleDB vs TDengine

维度InfluxDB 1.xTimescaleDBTDengine
类型纯时序PG 扩展纯时序(自研引擎)
写入性能极高(10x InfluxDB)
查询语言InfluxQLSQLSQL
生态Telegraf + GrafanaPG 生态较新,国产生态
集群企业版(不开源)Citus / Patroni开源(3.x 内置集群)
内存占用大(PG)极小(1/10 InfluxDB)
适合监控、Prometheus 替代关系+时序混合工业 IoT、千万级设备

经验法则

  • 监控指标、可视化、Prometheus 替代 → InfluxDB 1.x/2.x
  • 业务系统需要关系 + 时序混合 → TimescaleDB
  • 工业 IoT / 千万级设备 / 国产化 → TDengine

七、2024+ 视角补充

本文写于 2023-09,2024-2026 几年里这三类时序库都有显著演进:

InfluxDB:2024-01 推出 InfluxDB 3.0(InfluxData 重写了存储引擎为 FDAP 架构,基于 Apache Arrow + DataFusion),IO 性能比 1.x/2.x 提升 10x+,但 OSS 版本仅暴露核心读写 API;2.x 仍是当前生态最稳的"开箱即用"选择。Telegraf + InfluxDB 2.x + Grafana 这套依然是把"指标 + 时序分析"零代码搭起来的首选。

TimescaleDB:2024-08 发布的 TimescaleDB 2.18 把 hypercore 列为正式 GA——hypercore 是新一代存储引擎(行存 + 列存混合),分析查询比 hypertable 快 10-100x。TimescaleDB 还在 2024-09 把 timescale/timescaledb 镜像迁到 timescale/timescaledb-ha,推荐改用 HA 镜像做生产。

TDengine:2024-2025 持续迭代 3.3.x → 3.4.x,主要变化:

  • TDgpt 内置 AI 分析(2024-11):时序异常检测、预测直接 SQL 调用
  • 流计算引擎 2.0:窗口函数 + 事件驱动双模式
  • 3 节点 RAFT 集群:内置高可用不再依赖第三方(之前要接 ZK)
  • 订阅/消费者 模型重构:Kafka-like 订阅 API,2024-Q3 全面替代旧的 topic 模式

经验法则更新:监控/Prometheus 替代首选仍是 InfluxDB 2.x;混合关系+时序用 TimescaleDB(强烈推荐升 2.18+ 体验 hypercore);工业 IoT/千万级设备 TDengine 3.4+ 优势进一步扩大(10x 性能 + 内置 AI)。

八、扩展阅读

使用 Hugo 构建
主题 StackJimmy 设计