feat: 升级心跳数据库为高吞吐日分区模型(v2)
- 新增 heartbeat 数据库与表结构文档,描述心跳明细表设计及字段约束。 - 新增 OpenSpec 符合性说明文档,指出与规范的一致点及偏差。 - 新增 Kafka 心跳数据推送说明文档,定义消息格式与推送方式。 - 更新数据库创建脚本,支持 UTF-8 编码与中文排序规则。 - 更新心跳表结构脚本,定义主表及索引,采用 ts_ms 日分区。 - 实现自动分区机制,确保按天创建分区以支持高吞吐写入。 - 添加数据库应用脚本,自动执行 SQL 文件并验证表结构。 - 添加运行时烟雾测试脚本,验证数据库连接与基本操作。 - 添加完整的烟雾测试脚本,验证数据插入与分区创建。
This commit is contained in:
20
openspec/changes/update-heartbeat-db-v2/proposal.md
Normal file
20
openspec/changes/update-heartbeat-db-v2/proposal.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# 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` 会触发“对象正在使用”限制;因此采用“预创建分区(安装/定时任务/启动时调用)”。
|
||||
Reference in New Issue
Block a user