refactor(flight-schd): 全宽表零子表收敛 16 个集合并定案 PIPELINE_LOCK 行锁 (ACM2-29)
依据 ACM2-29 新定案【全宽表·零子表】,废除「*_TXT 过渡 + 按需升独立子表」 原规划(对 XSD maxOccurs=99 的过度设计),结合报文样例与成都现场地服实际 规律(登机门 1~2、值机柜台 1~3、转盘 1~2、延误单有效、靠撤桥/轮挡各 1 次) 将 16 个明细集合全部收敛为 FLIGHT_SCHD 宽表标量列或紧凑 VARCHAR 字串。 行为变更: - V1.2.0 迁移:新增集合平铺槽位列(GTDT×2/CKDT×3/CLDT×2/PSDT×2/CHDT×2, 跨集合同名属性按 B 前缀/CH 前缀消解)、里程碑标量列(DELY_*、ABTM_A/D、 CHOT_ON/OFF)、异常前缀标量列(FDIV/FRET/FLAB)、紧凑航路字串 (ROUT_PATH/ERUT_PATH)与无界集合 JSON 字串列(SRVT/VIPF/MAFL_TEXT); 删除全部 16 个 *_TXT 文本列;不建任何子表、零 CLOB; - 仓储层:删除子表替换/回查机制,写侧集合键平铺为列(序号属性 0 = 显式 删除标记,分舱复用条目抹平去重,超界按定案丢弃),读侧由平铺列重建 16 个集合键,视图与 legacy flightInfo hash 保持同构(KAFKA_SCHD 线格式 与 FS7 Diff 逐字段比对不受存储形态影响); - I5 单写者锁修正:PIPELINE_LOCK 单行 SELECT ... FOR UPDATE 取代 PG advisory lock,PG/Oracle 11g 同构,无 DBMS_LOCK DBA 特权依赖; - FlightFieldsJson 对契约结构字段解析 JSON tree 输出原生数组/对象, 杜绝集合被再次编码成字符串的双重转义。 不变量:消息严格 FIFO、单写者互斥、增量=字段级合并(集合键出现=单资源 集合级全量快照替换)、快照=整体替换、按代域化差删均不变。 迁移影响:本地开发库为一次性测试数据,已重置并由 Flyway 全新应用 V1.0.0→V1.2.0(同文件名内容变更,沿用旧库会触发校验和不匹配)。 验证:./gradlew test 全绿(66 个用例,含本地 PG 真实方言集成:集合槽位 替换/清除、里程碑与航路平铺回读、PIPELINE_LOCK NOWAIT 互斥与提交释放)。
This commit is contained in:
@@ -74,7 +74,7 @@ CIIMS / AODB 等上游
|
||||
## 5. 必须保持的约束
|
||||
|
||||
- **消息严格 FIFO**:队头失败并退避时,后续消息仍不能越过它。只有队头完成或按失败策略进入终态后,队列才继续推进。收报重扫和水位设计必须防止较小 ID 漏入队而被后续消息越过。
|
||||
- **动态状态单写者**:`FLIGHT_SCHD` 运营航班表和快照 `SCHD_GEN` 只由主泵单线程写入。生产单实例通过 PG advisory lock 保护,不能通过增加实例或处理线程直接扩容。
|
||||
- **动态状态单写者**:`FLIGHT_SCHD` 运营航班表和快照 `SCHD_GEN` 只由主泵单线程写入。事务通过 `PIPELINE_LOCK` 的 `FLIGHT_SCHD_WRITER` 行执行 `SELECT ... FOR UPDATE` 互斥;该方案在 PG/Oracle 11g 均无需数据库扩展或额外 DBA 特权。不能通过增加实例或处理线程直接扩容。
|
||||
- **身份去重**:同一业务身份只能绑定一条有效处理记录,重复报文不应再次产生业务副作用。具体身份组成和重放规则见设计文档。
|
||||
- **快照可恢复**:快照覆盖、旧数据清理和版本推进需要原子性与重放保护;不能在恢复时把旧代数据重新写回。
|
||||
- **作业不与消息混排**:`PUMP_JOB` 是独立队列,只在没有消息队头或队头处于退避窗口时执行。执行窗口与饥饿边界需要明确验证。
|
||||
|
||||
Reference in New Issue
Block a user