- 新增 heartbeat 数据库与表结构文档,描述心跳明细表设计及字段约束。 - 新增 OpenSpec 符合性说明文档,指出与规范的一致点及偏差。 - 新增 Kafka 心跳数据推送说明文档,定义消息格式与推送方式。 - 更新数据库创建脚本,支持 UTF-8 编码与中文排序规则。 - 更新心跳表结构脚本,定义主表及索引,采用 ts_ms 日分区。 - 实现自动分区机制,确保按天创建分区以支持高吞吐写入。 - 添加数据库应用脚本,自动执行 SQL 文件并验证表结构。 - 添加运行时烟雾测试脚本,验证数据库连接与基本操作。 - 添加完整的烟雾测试脚本,验证数据插入与分区创建。
1.7 KiB
1.7 KiB
Change: 升级心跳数据库为高吞吐日分区模型(v2)
Why
现有实现仅包含简化的 heartbeat 表(component/status/timestamp),无法满足“每分钟约 5 万条记录、按酒店/时间范围检索、按状态聚合”的高吞吐与长期存储需求。
What Changes
- DB:在既有数据库(默认
log_platform)内新增/升级为按ts_ms(毫秒 epoch)日分区的心跳明细表,并提供分区预创建机制 - DB:补齐指定索引(hotel_id/power_state/guest_type/device_id B-tree;service_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会触发“对象正在使用”限制;因此采用“预创建分区(安装/定时任务/启动时调用)”。