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:
@@ -0,0 +1,118 @@
|
||||
-- =====================================================================
|
||||
-- ACM2-29 · 全宽表·零子表(Zero-Subtable Wide Table)定案落地
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 废除「16 个明细集合保留 *_TXT 并逐个升独立子表」的原规划(对 XSD
|
||||
-- maxOccurs=99 的过度设计)。结合 docs/legacy/SIS_AODB_RMS-V0.1.md 报文
|
||||
-- 样例与成都现场(双流/天府)地服实际规律——登机门 1~2 个、值机柜台专属
|
||||
-- 1~3 个、转盘 1~2 个、延误单有效、靠撤桥/轮挡各 1 次——全部集合收敛为
|
||||
-- FLIGHT_SCHD 宽表的标准 VARCHAR 标量列或紧凑格式化字串,零子表、零 CLOB:
|
||||
-- · 平铺标量列(属性名 + 出现槽位序号,可按需直接追加普通 B-tree,
|
||||
-- 11g/PG 零方言成本):
|
||||
-- GTDT → GATE/PGOT/PGCT/GOTM/GCTM/GTYP ×2 组(登机门 1~2 个)
|
||||
-- CKDT → CHKC/CCLS/PCOT/PCCT/COTM/CCTM/CTYP ×3 组
|
||||
-- (值机柜台 1~3 个;同柜台分舱复用条目在写侧抹平去重)
|
||||
-- CLDT → BELT/BCLS/BPCOT/BPCCT/FBAG/LBAG/BTYP ×2 组(转盘 1~2 个;
|
||||
-- B 前缀时刻 = BELT 专属,避免与值机 PCOT/PCCT 同名)
|
||||
-- PSDT → PSST/STST/STET ×2 组(计划机位 1~2 个)
|
||||
-- CHDT → CHUT/CHCLS/PCBT/PCET/CBTM/CETM/CHTYP ×2 组(离港通道 1~2 个;
|
||||
-- CH 前缀 = CHUTE 专属,避免与值机 CCLS/CTYP 同名)
|
||||
-- DELY → DELY_CODE/DELY_STRT/DELY_DURA/DELY_REMC(单有效覆盖语义)
|
||||
-- ABTM → ABTM_A/ABTM_D(靠桥/撤桥时刻;桥号沿用派生列 ABDG)
|
||||
-- CHOT → CHOT_ON/CHOT_OFF(上/下轮挡时刻;机位沿用派生列 STND)
|
||||
-- FDIV/FRET/FLAB → 前缀标量列(规范 1:0..1 单值异常)
|
||||
-- 超出现场定界的条目按定案丢弃(不再为 XSD 理论上限设计)。
|
||||
-- · 紧凑 VARCHAR 字串列(无界/航路型集合,11g VARCHAR2 内联存储,非 CLOB):
|
||||
-- ROUT/ERUT → ROUT_PATH/ERUT_PATH(≤7 站紧凑航路 "APCD/SCAT/SCDT,...")
|
||||
-- SRVT/VIPF/MAFL → *_TEXT(服务/VIP/共享列表条数无 XSD 上限,存 JSON 数组;
|
||||
-- 超长写侧 fail fast,不允许静默截断)
|
||||
-- · 值语义保持 legacy 字符串原样;读侧视图由标量列重建集合键,
|
||||
-- 与 legacy flightInfo hash 同构(KAFKA_SCHD 线格式与 FS7 对拍不变)。
|
||||
-- · 运营资源消息语义 = 单资源集合级全量快照替换;外层航班字段仍为
|
||||
-- 字段级增量合并(集合键出现即整集合覆盖,缺槽位置 NULL)。
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 交叉实例单写者互斥(I5 修正定案):PIPELINE_LOCK 行级锁。主泵写事务
|
||||
-- 持有 FLIGHT_SCHD_WRITER 行 SELECT ... FOR UPDATE;连接断开、提交或回滚
|
||||
-- 时由数据库释放,PG 与 Oracle 11g 同构,无 DBMS_LOCK DBA 特权依赖。
|
||||
-- =====================================================================
|
||||
|
||||
ALTER TABLE FLIGHT_SCHD
|
||||
-- 登机门 GTDT(现场 1~2 个)
|
||||
ADD COLUMN GATE1 VARCHAR(64), ADD COLUMN PGOT1 VARCHAR(64), ADD COLUMN PGCT1 VARCHAR(64),
|
||||
ADD COLUMN GOTM1 VARCHAR(64), ADD COLUMN GCTM1 VARCHAR(64), ADD COLUMN GTYP1 VARCHAR(64),
|
||||
ADD COLUMN GATE2 VARCHAR(64), ADD COLUMN PGOT2 VARCHAR(64), ADD COLUMN PGCT2 VARCHAR(64),
|
||||
ADD COLUMN GOTM2 VARCHAR(64), ADD COLUMN GCTM2 VARCHAR(64), ADD COLUMN GTYP2 VARCHAR(64),
|
||||
-- 值机柜台 CKDT(现场专属 1~3 个,分舱复用条目写侧抹平)
|
||||
ADD COLUMN CHKC1 VARCHAR(64), ADD COLUMN CCLS1 VARCHAR(64),
|
||||
ADD COLUMN PCOT1 VARCHAR(64), ADD COLUMN PCCT1 VARCHAR(64),
|
||||
ADD COLUMN COTM1 VARCHAR(64), ADD COLUMN CCTM1 VARCHAR(64), ADD COLUMN CTYP1 VARCHAR(64),
|
||||
ADD COLUMN CHKC2 VARCHAR(64), ADD COLUMN CCLS2 VARCHAR(64),
|
||||
ADD COLUMN PCOT2 VARCHAR(64), ADD COLUMN PCCT2 VARCHAR(64),
|
||||
ADD COLUMN COTM2 VARCHAR(64), ADD COLUMN CCTM2 VARCHAR(64), ADD COLUMN CTYP2 VARCHAR(64),
|
||||
ADD COLUMN CHKC3 VARCHAR(64), ADD COLUMN CCLS3 VARCHAR(64),
|
||||
ADD COLUMN PCOT3 VARCHAR(64), ADD COLUMN PCCT3 VARCHAR(64),
|
||||
ADD COLUMN COTM3 VARCHAR(64), ADD COLUMN CCTM3 VARCHAR(64), ADD COLUMN CTYP3 VARCHAR(64),
|
||||
-- 行李转盘 CLDT(现场 1~2 个;B 前缀时刻 = BELT 专属)
|
||||
ADD COLUMN BELT1 VARCHAR(64), ADD COLUMN BCLS1 VARCHAR(64),
|
||||
ADD COLUMN BPCOT1 VARCHAR(64), ADD COLUMN BPCCT1 VARCHAR(64),
|
||||
ADD COLUMN FBAG1 VARCHAR(64), ADD COLUMN LBAG1 VARCHAR(64), ADD COLUMN BTYP1 VARCHAR(64),
|
||||
ADD COLUMN BELT2 VARCHAR(64), ADD COLUMN BCLS2 VARCHAR(64),
|
||||
ADD COLUMN BPCOT2 VARCHAR(64), ADD COLUMN BPCCT2 VARCHAR(64),
|
||||
ADD COLUMN FBAG2 VARCHAR(64), ADD COLUMN LBAG2 VARCHAR(64), ADD COLUMN BTYP2 VARCHAR(64),
|
||||
-- 计划机位 PSDT(现场 1~2 个)
|
||||
ADD COLUMN PSST1 VARCHAR(64), ADD COLUMN STST1 VARCHAR(64), ADD COLUMN STET1 VARCHAR(64),
|
||||
ADD COLUMN PSST2 VARCHAR(64), ADD COLUMN STST2 VARCHAR(64), ADD COLUMN STET2 VARCHAR(64),
|
||||
-- 离港行李通道 CHDT(现场 1~2 个;CH 前缀 = CHUTE 专属)
|
||||
ADD COLUMN CHUT1 VARCHAR(64), ADD COLUMN CHCLS1 VARCHAR(64),
|
||||
ADD COLUMN PCBT1 VARCHAR(64), ADD COLUMN PCET1 VARCHAR(64),
|
||||
ADD COLUMN CBTM1 VARCHAR(64), ADD COLUMN CETM1 VARCHAR(64), ADD COLUMN CHTYP1 VARCHAR(64),
|
||||
ADD COLUMN CHUT2 VARCHAR(64), ADD COLUMN CHCLS2 VARCHAR(64),
|
||||
ADD COLUMN PCBT2 VARCHAR(64), ADD COLUMN PCET2 VARCHAR(64),
|
||||
ADD COLUMN CBTM2 VARCHAR(64), ADD COLUMN CETM2 VARCHAR(64), ADD COLUMN CHTYP2 VARCHAR(64),
|
||||
-- 延误 DELY(单有效覆盖语义)
|
||||
ADD COLUMN DELY_CODE VARCHAR(64),
|
||||
ADD COLUMN DELY_STRT VARCHAR(64),
|
||||
ADD COLUMN DELY_DURA VARCHAR(64),
|
||||
ADD COLUMN DELY_REMC VARCHAR(80),
|
||||
-- 靠撤桥 ABTM / 轮挡 CHOT(保障里程碑时刻)
|
||||
ADD COLUMN ABTM_A VARCHAR(64),
|
||||
ADD COLUMN ABTM_D VARCHAR(64),
|
||||
ADD COLUMN CHOT_ON VARCHAR(64),
|
||||
ADD COLUMN CHOT_OFF VARCHAR(64),
|
||||
-- 异常明细 FDIV/FRET/FLAB(规范 1:0..1 单值异常)
|
||||
ADD COLUMN FDIV_DDES VARCHAR(64),
|
||||
ADD COLUMN FDIV_DDIR VARCHAR(64),
|
||||
ADD COLUMN FDIV_REMC VARCHAR(80),
|
||||
ADD COLUMN FRET_REID VARCHAR(64),
|
||||
ADD COLUMN FRET_RSN VARCHAR(80),
|
||||
ADD COLUMN FLAB_ARES VARCHAR(64),
|
||||
ADD COLUMN FLAB_RSN VARCHAR(80),
|
||||
-- 紧凑航路字串(≤7 站,免除多表关联)
|
||||
ADD COLUMN ROUT_PATH VARCHAR(256),
|
||||
ADD COLUMN ERUT_PATH VARCHAR(256),
|
||||
-- 无界集合紧凑 JSON 数组字串(11g VARCHAR2 内联,非 CLOB;超长写侧 fail fast)
|
||||
ADD COLUMN SRVT_TEXT VARCHAR(2000),
|
||||
ADD COLUMN VIPF_TEXT VARCHAR(512),
|
||||
ADD COLUMN MAFL_TEXT VARCHAR(512);
|
||||
|
||||
-- 16 个集合的过渡 *_TXT 文本列全清场
|
||||
ALTER TABLE FLIGHT_SCHD
|
||||
DROP COLUMN ROUT_TXT, DROP COLUMN ERUT_TXT, DROP COLUMN CHDT_TXT,
|
||||
DROP COLUMN GTDT_TXT, DROP COLUMN PSDT_TXT, DROP COLUMN CKDT_TXT,
|
||||
DROP COLUMN CLDT_TXT, DROP COLUMN DELY_TXT, DROP COLUMN CHOT_TXT,
|
||||
DROP COLUMN ABTM_TXT, DROP COLUMN SRVT_TXT, DROP COLUMN VIPF_TXT,
|
||||
DROP COLUMN MAFL_TXT, DROP COLUMN FDIV_TXT, DROP COLUMN FRET_TXT,
|
||||
DROP COLUMN FLAB_TXT;
|
||||
|
||||
-- 运营查询索引按需逐列追加示例(11g/PG 均为普通 B-tree,零方言成本):
|
||||
-- CREATE INDEX idx_flight_schd_gate1 ON FLIGHT_SCHD (GATE1);
|
||||
-- CREATE INDEX idx_flight_schd_chkc1 ON FLIGHT_SCHD (CHKC1);
|
||||
-- CREATE INDEX idx_flight_schd_dely_code ON FLIGHT_SCHD (DELY_CODE);
|
||||
|
||||
-- 交叉实例单写者互斥行(I5:SELECT ... FOR UPDATE 行级锁)
|
||||
CREATE TABLE PIPELINE_LOCK (
|
||||
LOCK_KEY VARCHAR(32) NOT NULL PRIMARY KEY,
|
||||
OWNER_INFO VARCHAR(128),
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL
|
||||
);
|
||||
INSERT INTO PIPELINE_LOCK (LOCK_KEY, OWNER_INFO, UPDATED_AT)
|
||||
VALUES ('FLIGHT_SCHD_WRITER', NULL, CURRENT_TIMESTAMP);
|
||||
Reference in New Issue
Block a user