梅特尔恐怖逃生
64.25M · 2026-03-22
@[toc]
时序数据库早就不只是“写得快、存得下”这么简单了。到了 2025 年,大家更看重的是能不能围绕场景把链路交付出来——接入稳不稳、存储贵不贵、查询快不快、系统抗不抗压、治理合不合规、国产化环境能不能长期跑住。
数据源更碎更近
边缘侧设备、网关、工业控制与车联网等产生大量“短周期、高噪声、易丢包”的数据,接入链路需要更强的吞吐与容错。
“写入高峰 + 查询突发”成为常态
白天业务写入、夜间批处理、故障排查突发查询叠加,要求数据库同时兼顾写入、压缩、聚合与并发读。
从“保存原始数据”走向“可运营的数据资产”
不只是存:还要分层(热/温/冷)、保留策略、降采样、数据质量与审计,让数据能被长期复用。
“可控可用”比“参数最优”更重要
关键行业更看重可交付性:可运维、可审计、可扩展、可兼容生态、可在国产化环境稳定运行。
如果把行业格局拆开看,时序产品大体会落在三条路线上:偏工业/能源的生产系统路线、偏 IT 可观测性的运维路线、以及偏物联网与平台化的数据平台路线。走到 2025 年,真正能拉开差距的往往不是某一项“极限指标”,而是能不能把能力沉淀成一套可复用、可验收的交付件:
把能力按“落地会用到的层次”拆开看,规划、验收、扩容评估都会清晰不少。
flowchart TB
A[数据接入<br/>采集/网关/消息队列] --> B[写入与缓冲<br/>批量/乱序/幂等]
B --> C[存储组织<br/>分区/索引/压缩]
C --> D[查询分析<br/>窗口聚合/关联/预聚合]
D --> E[数据治理<br/>生命周期/权限/审计]
E --> F[高可用与运维<br/>备份恢复/监控/扩缩容]
关键行业里,金仓的时序能力更多是作为金仓数据库的企业级数据底座能力来用:它能承载“海量时序数据采集检索类应用”等场景,并且支持和关系、文档、GIS 等模型统一存储、混合访问。换句话说,很多时候你不必为了时序单独再拼一套系统,运维与治理的压力也会小一截。
做国产化替代,难点往往不在“能不能迁”,而在“迁完能不能长期稳”。所以工程交付必须把“评估—迁移—开发—运维”这一串打通。金仓官网公开信息里也明确提到其配套的工具组件体系覆盖迁移评估、数据迁移、开发管理与集中运维等环节,目的就是把“能跑起来”进一步变成“能持续跑下去”。
很多项目里,写入的真实痛点并不是“单条写得慢”,而是下面这些更折磨人的问题:
落到工程上,可以按这个思路做:
时序数据按时间范围切分(天/小时/周等)几乎是“默认正确”的选择,收益也很直接:
从产品形态上看,金仓把时序能力放进融合数据库体系里,强调多种模型统一存储、混合访问。这样一来,“时序明细 + 业务维表 +(可选的)空间信息”就能在同一底座内闭环完成,跨系统同步与一致性治理的麻烦事会少很多。[^kb-kes]
看板/告警最常见的坑就是:原始点位太多,一上来就扫明细,延迟上去了,资源也被吃光。更稳妥的做法通常是:
在金仓公开的时序分析实践里,“区间筛选 + 时间窗口聚合”的函数化思路经常被用来把复杂查询收敛成稳定、可复用的时间窗操作,这样压测、缓存和看板复用都会更顺手。[^kb-safety]
关键行业往往要求:
租户/部门隔离(多业务域并行);
行级/库级/表级权限;
操作审计、追溯与留痕;
数据保留策略可控、可审计。
先用通用 SQL 来阐述建模思路,把“设备测点”当作事实表,并按照时间范围实施分区,然后针对最常见的过滤条件创建合成索引,这样大概就可以涵盖多数生产场景。
不同系统对于分区语法的细节可能存在差别,不过建模思路以及字段设计可以照搬,等到实际执行的时候,再依照金仓时序数据库的功能以及运维规范去调整分区粒度和索引策略即可。
ts:采集时间(统一使用同一时区/统一入库口径)device_id:设备/点位唯一标识metric:指标名(温度、压力、电流等)value:数值quality:质量位(可选,标记是否有效/是否补传)tags:扩展维度(可选,JSON 或规范化维表)CREATE TABLE telemetry_points (
ts TIMESTAMP NOT NULL,
device_id VARCHAR(64) NOT NULL,
metric VARCHAR(64) NOT NULL,
value DOUBLE PRECISION NOT NULL,
quality INTEGER DEFAULT 0,
PRIMARY KEY (ts, device_id, metric)
);
CREATE TABLE telemetry_points_2025_01_01 PARTITION OF telemetry_points
FOR VALUES FROM ('2025-01-01') TO ('2025-01-02');
CREATE INDEX idx_tp_device_metric_ts ON telemetry_points (device_id, metric, ts);
CREATE INDEX idx_tp_ts ON telemetry_points (ts);
时序平台一旦做成“平台”,就会遇到多业务域/多租户的问题。工程上最常见的隔离方式基本就这两类:
tenant_id 字段,适合租户多且小、共享资源的场景,但需要更严格的权限与审计策略。许多团队执行时序分析的时候,最常犯的错误就是“每个人都有一套自己的时间窗逻辑”,这样就造成口径不统一,性能也无法控制,金仓在开展时序分析的时候,更侧重于把“时间范围过滤,区间筛选,时间窗口聚合”这些功能做成函数化,模板化的模式,从而减轻重复劳动的负担,也便于创建性能基线并实施回归检测,这里有一组通用的 SQL 思路;到了实际操作金仓时,可以优先采用金仓自身具备的等效内置函数及其相关能力,把逻辑编写得更为精炼,稳定。
SELECT ts, value
FROM telemetry_points
WHERE device_id = 'D-10086'
AND metric = 'temperature'
AND ts >= '2025-01-01 00:00:00'
AND ts < '2025-01-02 00:00:00'
ORDER BY ts;
没有内置时间桶函数时,也可以用“时间截断/取整”的方式表达时间桶。
SELECT
(DATE_TRUNC('minute', ts) - (EXTRACT(minute FROM ts)::int % 5) * INTERVAL '1 minute') AS bucket_start,
AVG(value) AS avg_value,
MIN(value) AS min_value,
MAX(value) AS max_value
FROM telemetry_points
WHERE device_id = 'D-10086'
AND metric = 'temperature'
AND ts >= '2025-01-01 00:00:00'
AND ts < '2025-01-01 06:00:00'
GROUP BY bucket_start
ORDER BY bucket_start;
当看板查询频繁、且大部分只需要分钟级指标时,建议做“明细层 + 聚合层”两层结构。
CREATE TABLE telemetry_1m (
bucket_start TIMESTAMP NOT NULL,
device_id VARCHAR(64) NOT NULL,
metric VARCHAR(64) NOT NULL,
avg_value DOUBLE PRECISION NOT NULL,
min_value DOUBLE PRECISION NOT NULL,
max_value DOUBLE PRECISION NOT NULL,
cnt BIGINT NOT NULL,
PRIMARY KEY (bucket_start, device_id, metric)
);
聚合刷新策略建议:
现场采集常常会遇到这样一些麻烦事,第一种是设备补传引发的重复情况,第二种是因为网络抖动而出现的乱序现象,第三种则是由于设备离线造成的缺段问题,想要减小返工量,最好是就在模型层预先留出控制面。
quality 标记来源(正常/补传/估算/无效等),便于告警与统计口径一致event_id(设备序号或哈希),用于幂等写入与去重CREATE TABLE telemetry_points2 (
ts TIMESTAMP NOT NULL,
device_id VARCHAR(64) NOT NULL,
metric VARCHAR(64) NOT NULL,
value DOUBLE PRECISION NOT NULL,
quality INTEGER DEFAULT 0,
event_id VARCHAR(128) NOT NULL,
PRIMARY KEY (event_id)
);
看板经常要一根“等间隔时间轴”(比如每分钟一个点)。遇到缺失时,先用 NULL 占位更干净,后面在展示层再做插值或前向填充就好。
WITH time_grid AS (
SELECT generate_series(
TIMESTAMP '2025-01-01 00:00:00',
TIMESTAMP '2025-01-01 01:00:00',
INTERVAL '1 minute'
) AS ts
),
raw AS (
SELECT DATE_TRUNC('minute', ts) AS ts, AVG(value) AS v
FROM telemetry_points
WHERE device_id = 'D-10086'
AND metric = 'temperature'
AND ts >= '2025-01-01 00:00:00'
AND ts < '2025-01-01 01:00:00'
GROUP BY DATE_TRUNC('minute', ts)
)
SELECT g.ts, r.v
FROM time_grid g
LEFT JOIN raw r ON r.ts = g.ts
ORDER BY g.ts;
不少告警规则并不是“超过阈值就立刻报”,而是“连续超过阈值 N 分钟才算”。这类需求更适合先在分钟聚合层算,再去识别连续段。
WITH m1 AS (
SELECT
DATE_TRUNC('minute', ts) AS minute_ts,
AVG(value) AS avg_value
FROM telemetry_points
WHERE device_id = 'D-10086'
AND metric = 'temperature'
AND ts >= '2025-01-01 00:00:00'
AND ts < '2025-01-01 06:00:00'
GROUP BY DATE_TRUNC('minute', ts)
),
flag AS (
SELECT
minute_ts,
avg_value,
CASE WHEN avg_value >= 80 THEN 1 ELSE 0 END AS over_th
FROM m1
),
grp AS (
SELECT
*,
SUM(CASE WHEN over_th = 0 THEN 1 ELSE 0 END) OVER (ORDER BY minute_ts) AS grp_id
FROM flag
)
SELECT
MIN(minute_ts) AS start_ts,
MAX(minute_ts) AS end_ts,
COUNT(*) AS minutes
FROM grp
WHERE over_th = 1
GROUP BY grp_id
HAVING COUNT(*) >= 5
ORDER BY start_ts;
时序项目最容易越跑越贵,原因往往很朴素:原始数据一直涨、聚合层没规划、过期数据清不掉(或者不敢清)。
一个实用的做法,是按业务价值把数据分三层:
这块怎么验收也不难,口径可以很清楚:
过期数据的处理上,优先选“按分区删除/归档”,别用“全表扫一遍再删”的方式去赌运气,这样能绕开长事务和大量碎片带来的抖动风险。验收时就看两件事:清理窗口里系统稳不稳、清理耗时能不能预测。
flowchart TB
A[原始明细点位<br/>秒级/更细] --> B[分钟聚合<br/>看板主力]
B --> C[小时/天聚合<br/>报表与趋势]
A --> D[事件/告警表<br/>定位入口]
D --> A
下面我就按“业务诉求—数据特征—落地打法”来写,你写征文或方案时也方便直接拿去用。
顺带一提,“时间 + 业务维度”的联合分区/分片,以及把查询收敛到区间筛选与时间窗口这套写法,在金仓官网的时序分析文章里被反复强调,用它来当方案的设计抓手会更落地。[^kb-logs][^kb-safety]
业务诉求
设备状态量(电压、电流、温度、振动等)连续采集;异常发生后要能快速定位时间窗、关联工况与告警记录。
数据特征
点位多、采样周期短;峰值写入高;查询以“设备+时间段”为主,伴随聚合与对比。
落地打法
sequenceDiagram
participant Dev as 设备/采集端
participant Gw as 网关/消息队列
participant TS as 金仓时序数据库
participant BI as 看板/告警
Dev->>Gw: 批量上报(含序号/时间戳)
Gw->>TS: 批量写入/重试
TS-->>BI: 分钟聚合指标
BI-->>TS: 异常回放查询(设备+时间窗)
业务诉求
把机台数据变成可运营指标(稼动率、能耗、节拍波动、良率关联),并能按产线/班组/工单维度分析。
数据特征
除时序明细外,必须强依赖维度(产线、工单、物料批次、工艺段)。
落地打法
业务诉求
融合多源数据(设备、环境、视频结构化指标、路网状态),要求稳定接入、实时聚合与趋势判断。
数据特征
来源多、格式不一、质量参差;需要统一时间对齐与数据质量管理。
落地打法
国产化替代项目真正的关键,通常不是“能不能替”,而是把风险尽量从“上线后暴露”前移到“上线前可控”。比较稳的推进方式,可以沿着“三条主线”走:
验证集建议至少覆盖这些维度:
写入:峰值吞吐、乱序补写、重试幂等;
查询:典型看板/报表/回放 SQL 的稳定延迟;
运维:备份恢复、扩容、分区维护、生命周期清理;
安全:权限隔离、审计留痕、账号策略与合规要求。
更为关键的是要将验证动作和工具链关联起来,迁移评定,数据迁移,开发守护以及集中运维这些环节都应该凝结成可回溯的交付物,不可让替代项目仅依靠记忆或者经验存在。
比较实用的做法,是先把指标分成三类:
这样资源消耗就能从“每次都扫明细”变成“多数读聚合,少数回放明细”,性能和成本都会稳很多。
建议把下面这些事做成日常动作,别等出问题才想起来:
分区自动创建与过期清理;
聚合层按计划刷新并具备回补窗口;
指标监控:写入延迟、查询 P95、磁盘增长、分区数量、慢查询;
灾备演练:按季度做恢复演练与容量回归。
2025年的时序数据库竞争渐渐变成了一场工程交付能力的较量,谁能将写入,存储,查询,治理,运维形成起一套可复用的体系,谁就更有可能在关键行业中做到规模扩张。
如果你正在推动关键行业时序数据平台的创建或者进行国产化替代,建议先把“数据分层,分区生命周期,预聚合”这三件事做好,然后逐步深入地完善指标体系和运维闭环。想了解更多产品与方案,可以到金仓数据库官网看看:www.kingbase.com.cn/
金仓数据库官方博客站:kingbase.com.cn/explore
想继续深挖的话,这里有不少专家文章、原理解析和最佳实践,可以按场景直接挑着看。