时序数据库:为什么传统数据库不够用了?
想象一下这个场景:
你负责维护一个监控系统,需要记录全国 10 万台服务器的 CPU、内存、磁盘、网络等指标。每台服务器每秒上报一次数据,那就是 10 万条/秒 的写入速度,24 小时不间断。
一天下来,就是 86.4 亿条数据。
用 MySQL 存?行数爆炸,查询慢,存储成本高。
用 MongoDB 存?时序聚合能力弱,存储效率低。
这就是时序数据库(Time Series Database,TSDB) 诞生的背景。
什么是时序数据?
时序数据是按时间顺序记录的数据点:
时间戳 值
─────────────────────────────────────────
2024-03-15 10:00:00 CPU: 45%
2024-03-15 10:00:01 CPU: 47%
2024-03-15 10:00:02 CPU: 46%
...时序数据的特征:
| 特征 | 说明 | 对传统数据库的影响 |
|---|---|---|
| 数据量大 | 持续写入,永不停止 | 行数爆炸 |
| 写入多,读取少 | 主要是采集写入,定期查询 | 写性能差 |
| 时间有序 | 时间是主维度 | B-Tree 不最优 |
| 冷热分明 | 最近数据热,历史数据冷 | 无法分层存储 |
| 需要聚合 | 经常需要按时间窗口聚合 | 聚合函数弱 |
| 保留策略 | 数据过期自动删除 | 无生命周期管理 |
常见时序数据场景
1. 监控指标
服务器 CPU、内存、磁盘使用率
应用响应时间、QPS、错误率
网络流量、连接数2. 传感器数据
工业设备温度、压力、振动
智能电表、水表、燃气表
车联网 GPS 轨迹、加速度3. 金融数据
股票价格、交易量
用户行为日志4. IoT 物联网
智能家居设备状态
农业大棚温湿度时序数据库 vs 传统数据库
| 特性 | 传统数据库 | 时序数据库 |
|---|---|---|
| 写入模型 | 随机读写 | 追加写入为主 |
| 数据模式 | OLTP/OLAP | 专用于时序 |
| 压缩算法 | 无特殊优化 | 专有压缩 |
| 聚合能力 | 弱 | 强大 |
| 保留策略 | 手动清理 | 自动过期 |
| 查询语言 | SQL | 扩展 SQL |
| 存储成本 | 高 | 低 5-10 倍 |
主流时序数据库对比
| 数据库 | 特点 | 适用场景 |
|---|---|---|
| InfluxDB | 最流行,功能完善 | 监控、IoT |
| Prometheus | 监控告警为主 | 云原生监控 |
| TimescaleDB | PostgreSQL 扩展 | 需要 SQL 兼容性 |
| TDengine | 国产,高性能 | 物联网、车联网 |
| OpenTSDB | HBase 后端 | 大规模数据 |
| KairosDB | Cassandra 后端 | 大规模数据 |
时序数据建模基础
时序数据库有独特的建模方式,理解这个是掌握 TSDB 的关键。
核心概念
┌────────────────────────────────────────────────────────┐
│ Measurement(测量) │
│ 类似关系型数据库的「表」 │
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Tags(标签) │ │
│ │ host=server01, region=us-east, role=web │ │
│ │ 用于过滤和分组,不随时间变化 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Fields(字段) │ │
│ │ cpu=45.2, memory=8192, disk=75 │ │
│ │ 随时间变化的值 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ Time: 2024-03-15 10:00:00 │
└────────────────────────────────────────────────────────┘数据写入示例
java
// InfluxDB Line Protocol
// measurement,tag1=value1,tag2=value2 field1=value1,field2=value2 timestamp
server_metrics,host=server01,cpu=45.2,memory=8192 1709808000000000000面试追问方向
- 时序数据库为什么写入性能比传统数据库好?
- 如何选择合适的时序数据库?
下一节,我们来对比主流时序数据库的优缺点。
