Files
Web_BLS_Heartbeat_Server/openspec/changes/update-heartbeat-db-v2/proposal.md
XuJiacheng eb94aaf92b feat: 升级心跳数据库为高吞吐日分区模型(v2)
- 新增 heartbeat 数据库与表结构文档,描述心跳明细表设计及字段约束。
- 新增 OpenSpec 符合性说明文档,指出与规范的一致点及偏差。
- 新增 Kafka 心跳数据推送说明文档,定义消息格式与推送方式。
- 更新数据库创建脚本,支持 UTF-8 编码与中文排序规则。
- 更新心跳表结构脚本,定义主表及索引,采用 ts_ms 日分区。
- 实现自动分区机制,确保按天创建分区以支持高吞吐写入。
- 添加数据库应用脚本,自动执行 SQL 文件并验证表结构。
- 添加运行时烟雾测试脚本,验证数据库连接与基本操作。
- 添加完整的烟雾测试脚本,验证数据插入与分区创建。
2026-01-12 19:53:27 +08:00

1.7 KiB
Raw Blame History

Change: 升级心跳数据库为高吞吐日分区模型v2

Why

现有实现仅包含简化的 heartbeatcomponent/status/timestamp无法满足“每分钟约 5 万条记录、按酒店/时间范围检索、按状态聚合”的高吞吐与长期存储需求。

What Changes

  • DB:在既有数据库(默认 log_platform)内新增/升级为按 ts_ms(毫秒 epoch日分区的心跳明细表并提供分区预创建机制
  • DB补齐指定索引hotel_id/power_state/guest_type/device_id B-treeservice_mask BRIN与约束NOT NULL、CHECK、IP 格式)
  • Docs:补充 Kafka 生产者推送数据结构与推送方式说明

Impact

  • Affected specs: openspec/specs/db, openspec/specs/kafka, openspec/specs/processor
  • Affected code: 未来 src/db/databaseManager.js 的表初始化/写入字段将需要适配(本变更提案先聚焦 DB 结构与脚本)

Key Decisions / Risks (需要明确)

  • 分区 + 主键冲突风险PostgreSQL 分区表的全局唯一/主键通常需要包含分区键;需求写“主键仅 id(bigserial)”。
    • 本次脚本将采用 PRIMARY KEY (ts_ms, id) 来保证可创建与可执行。
  • device_id 类型待确认:脚本暂定为 varchar(64)(兼容序列号/MAC/混合编码);若确定为纯数字,可改为 bigint 获得更紧凑索引。
  • 中文排序规则:不新建库时无法修改数据库级 collation若需要中文排序建议使用 ICU collation列级/表达式级)。
  • 自动建分区方式PostgreSQL 在单条 INSERT 执行过程中动态 CREATE PARTITION 会触发“对象正在使用”限制;因此采用“预创建分区(安装/定时任务/启动时调用)”。