跳到主要内容

数据库模型

本文档说明平台在哪里以什么形式存储数据。制定备份范围、直接查询或调整保留周期时参考。

不是一种类型

平台根据数据特性分别使用不同存储(polyglot persistence)。如果不知道某类数据存在哪里,备份就会不完整。

存储内容规模
PostgreSQL主数据 · 配置 · 事务43 张表
Cassandra (pp)时序 · 事件 · 聚合99 张表
Iceberg (spark.plantpulse)长期保管 · 分析1 张表

PostgreSQL — 主数据和配置

存储关系型数据。模式变更由 Flyway 管理,变更历史保存在 flyway_schema_history 中。

表名大多带有 mm_ 前缀(master/meta),共 36 个。

分组
组织·资产mm_company · mm_site · mm_asset_tree · mm_asset_type · mm_asset_status · mm_asset_statement · mm_asset_statement_plugin
采集定义mm_opc · mm_tag · mm_point · mm_scada
报警mm_alarm · mm_alarm_config · mm_alarm_recieve_users
事件·触发mm_event · mm_event_attributes · mm_trigger · mm_trigger_attributes
生产mm_order · mm_order_flow · mm_order_oee · mm_oee · mm_product · mm_shift · mm_calendar · mm_calendar_type
人员·交易方mm_employee · mm_customer
屏幕·查询mm_dashboard · mm_graph · mm_statement · mm_query_history
安全mm_security · mm_token · user_login · user_login_session
其他mm_blob · mm_metadata · metadata · version · version_history · dual
mm_alarm_recieve_users 的拼写

不是 receive,而是 recieve。这个拼写错误已经固化在模式中,查询时必须原样书写。


Cassandra — 时序和事件

键空间为 pp。99 张表分为两大类。

前缀数量含义
tm_91时序·聚合·统计(time series measurement)
ts_8通用时序引擎内部结构

tm_ 按对象再分——标签 32 · 资产 22 · 系统 6 · 监视 6 · 选项 5 · OPC 5 · 站点 3 · blob 3 等。

核心表 — tm_tag_point

存储原始采集值。其余标签表大多是它的派生。

PRIMARY KEY (tag_id, timestamp)
WITH CLUSTERING ORDER BY (timestamp DESC)
特性
分区键tag_id — 每个标签一个分区
聚类timestamp 降序 — 基本读取方向是最新优先
默认 TTL5356800 秒 = 62 天
压缩UnifiedCompactionStrategy(Cassandra 5.0+)
索引asset_id · opc_id 上的 SAI(Storage Attached Index)
为什么有 static 列

site_id · asset_id · line_id · area_id · opc_id · tag_name · typestatic 的。在一个标签(=一个分区)内值相同,因此每个分区只存储一次。 不必在每个数据点重复存储,大幅节省容量。

派生表 — 预先计算

Cassandra 查询时聚合成本高,所以采用写入时预计算。这就是为什么表很多。

类别
聚合tm_tag_point_aggregation_{1,5,10,30}_minutes · _1_hours
采样tm_tag_point_sampling_{10,30}_seconds · _{1,5,10,30}_minutes · _1_hours
计数tm_tag_point_count · _by_date · _by_opc · _by_site
质量·验证tm_tag_point_validation · _by_timestamp · _validation_count
AI 分析tm_tag_point_anomalies · _forecasts
快照·保管tm_tag_point_snapshot · tm_tag_point_archive

报警采用相同方式 — tm_tag_alarm_count · _count_by_date · _count_by_opc · _count_by_site · _duration · _on

不要直接删除聚合表

不会从原始数据重新生成。删除后该时间段的屏幕和报表会留空,只能从备份恢复。


Iceberg — 长期保管

超过 Cassandra TTL(62 天)的数据堆积在对象存储中进行分析

目录spark.plantpulse
tm_tag_point_warehouse
分区site_idyearmonthday
格式Iceberg v2(支持行级删除)
压缩Zstandard
执行Spark SQL
查询超过 62 天的数据

Cassandra 中没有。查询 Iceberg 一侧 → 分析层


备份中容易遗漏的部分

三个存储都是独立的备份对象。有时只备份 PostgreSQL 就以为万事大吉, 结果时序数据整个丢失。

存储丢失后果
PostgreSQL设备·标签定义、用户、仪表板消失
Cassandra最近 62 天数据消失
Iceberg / 对象存储历史数据消失

详见备份和恢复


相关文档