diff --git a/scripts/migrations/20260919_m11b_01_create_pbl_runtime_event.sql b/scripts/migrations/20260919_m11b_01_create_pbl_runtime_event.sql index cb364c8..421918b 100644 --- a/scripts/migrations/20260919_m11b_01_create_pbl_runtime_event.sql +++ b/scripts/migrations/20260919_m11b_01_create_pbl_runtime_event.sql @@ -3,42 +3,41 @@ -- 幂等: CREATE ... IF NOT EXISTS / DROP ... IF EXISTS CREATE TABLE IF NOT EXISTS `pbl_runtime_event` ( - `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '自增ID(逻辑主键;物理主键=(id,created_at))', - `tenant_id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '租户ID(多租户强制打头)', - `event_uid` VARCHAR(64) NOT NULL COMMENT '事件UID(uuid,应用层生成)', - `event_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '事件编码', - `idem_key` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '幂等键(同键重复投递只落一条)', - `world_id` BIGINT NOT NULL DEFAULT 0 COMMENT '世界ID(引用 world 基表,只读)', - `scene_id` BIGINT NOT NULL DEFAULT 0 COMMENT '场景/会话ID(引用 scense 基表,只读)', - `session_id` BIGINT NOT NULL DEFAULT 0 COMMENT '游戏会话ID(M11a 语义,与 scene_id 同域)', - `entity_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '实体ID(引用 entity 基表,只读)', - `actor_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '触发者(服务端会话解析,客户端禁填)', - `event_type` VARCHAR(64) NOT NULL COMMENT '事件类型', - `payload` TEXT NULL COMMENT '事件负载JSON(任务书字段)', - `payload_json` LONGTEXT NULL COMMENT '事件负载JSON(M11a 写路径列名,与 payload 同义留宽)', - `causation_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '因果链:引发本事件的事件UID', - `seq` BIGINT NOT NULL DEFAULT 0 COMMENT '会话内单调序号(轮询游标,应用层生成)', - `seq_no` BIGINT NOT NULL DEFAULT 0 COMMENT '会话内单调序号(M11a 写路径列名)', - `source` VARCHAR(32) NOT NULL DEFAULT 'runtime' COMMENT '来源:runtime/agent/script/client_intent', - `state` VARCHAR(16) NOT NULL DEFAULT 'applied' COMMENT 'applied/rejected/rolled_back', - `state_version` BIGINT NOT NULL DEFAULT 0 COMMENT '本事件推进到的服务端权威版本', - `tx_group` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '事务组(同组同事务)', - `broadcast` TINYINT NOT NULL DEFAULT 1 COMMENT '是否参与广播 0/1', - `created_by` BIGINT NOT NULL DEFAULT 0 COMMENT '创建人', - `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(分区键,禁TIMESTAMP)', - `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间戳(append-only:永不 UPDATE)', - `occurred_at` DATETIME NULL COMMENT '兼容列(M11a 旧分区键,新写入可空)', - PRIMARY KEY (`id`, `created_at`), - UNIQUE KEY `uk_event_uid` (`tenant_id`, `event_uid`, `created_at`), - UNIQUE KEY `uk_tenant_idem` (`tenant_id`, `idem_key`, `created_at`), - KEY `ix_scene_created` (`scene_id`, `created_at`), - KEY `ix_tenant_session_seq` (`tenant_id`, `session_id`, `seq`), - KEY `ix_tenant_session_seqno` (`tenant_id`, `session_id`, `seq_no`), - KEY `ix_tenant_world_type` (`tenant_id`, `world_id`, `event_type`), + `id` BIGINT NOT NULL AUTO_INCREMENT, + `tenant_id` VARCHAR(32) NOT NULL, + `event_uid` VARCHAR(64) NOT NULL, + `session_id` VARCHAR(64) NOT NULL DEFAULT '', + `world_id` VARCHAR(64) NOT NULL DEFAULT '', + `scene_id` VARCHAR(64) NOT NULL DEFAULT '', + `actor_id` VARCHAR(64) NOT NULL DEFAULT '', + `event_type` VARCHAR(64) NOT NULL DEFAULT '', + `event_code` VARCHAR(64) NOT NULL DEFAULT '', + `idem_key` VARCHAR(128) NOT NULL DEFAULT '', + `entity_id` VARCHAR(64) NOT NULL DEFAULT '', + `payload` TEXT, + `payload_json` LONGTEXT, + `seq` BIGINT NOT NULL DEFAULT 0, + `seq_no` BIGINT NOT NULL DEFAULT 0, + `source` VARCHAR(32) NOT NULL DEFAULT '', + `state` VARCHAR(32) NOT NULL DEFAULT '', + `tx_group` VARCHAR(64) NOT NULL DEFAULT '', + `broadcast` VARCHAR(16) NOT NULL DEFAULT '', + `causation_id` VARCHAR(64) NOT NULL DEFAULT '', + `state_version` BIGINT NOT NULL DEFAULT 0, + `created_by` VARCHAR(64) NOT NULL DEFAULT '', + `occurred_at` DATETIME NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`,`created_at`), + UNIQUE KEY `uk_event_uid` (`tenant_id`,`event_uid`,`created_at`), + UNIQUE KEY `uk_tenant_idem` (`tenant_id`,`idem_key`,`created_at`), + KEY `ix_tenant_session_seq` (`tenant_id`,`session_id`,`seq`), + KEY `ix_tenant_session_seqno` (`tenant_id`,`session_id`,`seq_no`), + KEY `ix_tenant_world_type` (`tenant_id`,`world_id`,`event_type`), + KEY `ix_scene_created` (`scene_id`,`created_at`), KEY `ix_tx_group` (`tx_group`), KEY `ix_created_at` (`created_at`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci - COMMENT='运行时事件流(append-only,按月RANGE分区,保留14个月)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 PARTITION BY RANGE COLUMNS(`created_at`) ( PARTITION `p202609` VALUES LESS THAN (DATE '2026-10-01'), PARTITION `p202610` VALUES LESS THAN (DATE '2026-11-01'),