- 新增配置项以支持旧/新明细表的独立写入开关及目标表名。 - 重构 DatabaseManager,抽象通用批量 COPY 写入内核,支持不同目标表的复用。 - 新增双明细写入编排器,支持旧/新表独立执行、重试及 fallback。 - 调整 HeartbeatProcessor.processBatch(),确保 room_status 独立执行。 - 错误表仅记录新表写入失败,旧表失败不再写入错误表。 - 重新定义消费暂停策略,基于当前启用的关键 sink 判断。 - 补充按 sink 维度的统计项与启动日志。 新增 G4 热表相关的数据库规范与处理逻辑,确保系统在双写模式下的稳定性与可扩展性。
2.1 KiB
2.1 KiB
1. Configuration
- 1.1 在
src/config/config.js新增旧/新明细写入开关、目标表名、room_status独立开关配置 - 1.2 在
src/config/config.example.js同步新增对应示例配置
2. Database Layer Refactor
- 2.1 抽象通用批量 COPY 写入内核
_insertEventsToTarget(events, targetConfig),支持接收目标表名、列清单、日志前缀等参数 - 2.2 将旧表
insertHeartbeatEvents()迁移为调用通用内核,保证旧逻辑行为不变 - 2.3 新增新表
heartbeat.heartbeat_events_g4_hot的目标配置与列映射 - 2.4 新增双明细独立编排方法
insertHeartbeatEventsDual(events),按配置分别调用旧/新 writer,聚合返回结构化结果
3. Processor Flow Adjustment
- 3.1 调整
HeartbeatProcessor.processBatch()调用链:改用insertHeartbeatEventsDual()替代原insertHeartbeatEvents() - 3.2 将
upsertRoomStatus()从"依赖旧表成功"改为"独立执行"——无论旧/新明细开关状态如何,只要roomStatusEnabled=true就始终执行 - 3.3 调整错误表调用:仅将新表 (
g4Hot) 失败记录送入insertHeartbeatEventsErrors(),旧表失败不写错误表
4. Connection & Pause Strategy
- 4.1 重构消费暂停判定:基于"当前启用的 sink 是否全部连接级不可写",而非单一旧表状态
- 4.2 区分连接错误与表级错误,避免新表结构问题误触发全局暂停
5. Observability
- 5.1 在
src/index.js启动时输出双写配置摘要(旧/新开关状态、目标表名、room_status开关) - 5.2 在
src/stats/statsManager.js新增按 sink 维度的统计项(legacy/g4Hot 成功数、失败数、room_status 成功/失败数)
6. Testing
- 6.1 补充
databaseManager双写编排单元测试(仅旧、仅新、双开、双关、交叉失败等场景) - 6.2 补充
room_status独立性断言测试 - 6.3 补充错误表仅接新表失败的断言测试
- 6.4 补充/扩展数据库 smoke 验证脚本,覆盖新表写入、分区、索引验证