时序数据库概述
数据湖的存储层是 针对工业时序工作负载优化的 Aster TSDB(apache-cassandra-timeseries)
。它是 Apache Cassandra cassandra-6.0 的内部派生版本,CQL 语法和磁盘格式与
上游保持一致——可以直接读取现有的 6.0 数据,所有新功能都需要启用才能生效。
由于名称相似,这是最容易混淆的地方。存储的内容不同。
| 时序数据库 (本文档) | 时序引擎 (TSE) | |
|---|---|---|
| 存储内容 | 传感器值 — 从现场采集的标签点(pp.tm_tag_point) | 指标 — PLANTPULSE.JMX.* · PLANTPULSE.EDGE.* 这种 系统自身的指标 |
| 特性 | 通用时序数据库 | 仅限指标 |
| 端口 | 9042 (CQL) | 7800(明文) · 7801(TLS) |
| 查询 | CQL — time_bucket_gapfill 这种内置函数 | TQL |
| 文档 | 本小节 | 时序引擎 |
「设备温度怎么样」查询这里,「昨天采集器处理了多少条」查询引擎。
引擎最终也写入同一个 Aster TSDB 集群,但 键空间和模式不同,因此存入 引擎的指标,即使通过 CQL 搜索标签表也不会出现。
有什么改进
现场时序数据有其固有的特性。每个标签以秒为单位不断累积,由于法规要求需要保留数年, 通信中断的边缘设备会一次性推送多天的数据(延迟加载),而查询几乎总是 「这个标签,这段时间」。使用原生 Cassandra 也可以实现,但 压缩、保留、聚合全部需要由应用程序 处理。此派生版本将这些工作转移到数据库内部。
| 想要完成的任务 | 此数据库所做的 | 文档 |
|---|---|---|
| 在服务器端完成分桶、聚合、插值 | 21个CQL函数 + 间隙填充 | 时序函数 |
| 自动压缩旧数据 | 分层存储 — 查询方式不变 | 分层存储 |
| 保留期过后自动删除 | 时序压缩 (TSCS) | 时序压缩 |
| 对日志、事件正文进行子字符串搜索 | 全文检索 — 包含韩文 | 全文检索 |
同时启用三项
쓰기 ──▶ [ 핫 구간 ] 최근 데이터. 평소대로 행으로 저장·질의
│
│ hot_window 를 지나면 (계층형 저장)
▼
[ 콜드 청크 ] 컬럼 지향으로 압축. SELECT 가 알아서 합쳐 읽는다
│
│ cold_window / retention 이 지나면
▼
통째로 삭제 컴팩션 없이 창 단위로 (TSCS)
TSCS 和分层存储相互独立。可以单独启用,但风险较低的是先启用 TSCS。
实测数据 — 运营表结构,2000万行
tm_tag_point(普通列8个),234号主机,基于chunk格式 v4。
| 项目 | 分层前 | 分层后 | 效果 |
|---|---|---|---|
| 存储容量 | 237.8 MB | 33.3 MB | 缩小7.1倍 (每行11.9 → 约1.7字节) |
count(*) (4万行分区) | 303 ms | 50 ms | 快6.1倍 |
time_bucket + 聚合 | 150~270 ms | 31~64 ms | 快3~6倍 |
| 间隙填充(locf · interpolate) | 162~284 ms | 30~53 ms | 快5.4倍 |
| 90个标签每小时平均值(360万行) | 14.9 s | 4.2 s | 快3.5倍 |
通常压缩是牺牲速度来换取容量,但在这里 所有测试查询都变快或持平 ——
因为读取的字节数减少了。无范围扫描也是按查询顺序逐个解压窗口,直到 LIMIT
填满就停止,所以不会变慢。
- 没有分区键的全表扫描聚合 在分层表上会返回 错误的值。该路径 不会合并chunk。
- 容量节省 取决于表结构。没有常量列和全null列的最小结构
(高熵
double只有一个)不适用以上数值。请根据自身表重新测量 后再做决定。
在哪里
通过 $PP_HOME/plantpulse-storage/db/cassandra 下的 apache-cassandra-timeseries-<version>.jar 进入。可以通过以下方式检查运行进程的版本。
docker exec plantpulse-datalake nodetool version
版本、来源、更新流程属于运维文档,本手册不包含。
更多信息
| 想要执行的任务 | 文档 |
|---|---|
| 使用分桶、间隙填充、插值 | 时序函数 |
| 将旧值移至更便宜的存储 | 分层存储 |
| 理解压缩 | 时序压缩 (TSCS) |
| 搜索正文 | 全文检索 |
| 直接使用 CQL 查询 | 数据查询 |
如果您正在寻找指标(系统指标),这里不是正确的地方 → 时序引擎