Vanillaxi commented on issue #1128: URL: https://github.com/apache/incubator-seata-go/issues/1128#issuecomment-4977508663
本 Issue 分为两个阶段,5个子 PR # 第一阶段:通用功能阶段 本阶段计划实现 semantic batch 的能力:batch 表达、事务管理、AT 镜像、lock key、undo log、部分失败和全局回滚语义 ## PR 1:统一 Batch API、执行模型、事务语义和 Backend 调度 Semantic Batch 执行流程 ``` 接收完整 BatchExecContext → 一次解析和校验整个 batch → 建立或复用同一个本地事务 → 使用同一个 TransactionContext → 按 item 顺序调用现有 DML executor → 累积镜像和 lock key → 任意失败立即停止 → 失败时整体 Rollback → 全部成功后根据 API 类型 Commit 或保持 Pending ``` 范围: * 增加能够一次表达完整参数集合的 `BatchExecContext`,以及Batch API、逐项执行结果和事务状态模型。 * 支持 API 自管事务和已有 `*sql.Tx` 两种入口,并明确失败、回滚失败、提交状态未知等语义。 * 提供统一 backend 调度框架和完整的 semantic backend,供后续数据库优化复用。 ## PR 2:完成 UPDATE、DELETE、INSERT 的 AT Batch 正确性 * 基于 PR 1 完成三类 DML 的批次级 before/after image、lock key 和 undo log 构建,并保证整个 batch 只使用一个本地事务、一个 AT branch 和一份累计 undo log。 * 覆盖重复更新同一行、联合主键、generated key、`RETURNING`、约束冲突和中途失败等场景。 * 任何无法安全构建完整镜像的 SQL 都应在业务 SQL 执行前明确拒绝,任意 item 失败时整体回滚。 # 第二阶段:驱动优化阶段 在第一阶段的前提下,为 PostgreSQL/pgx 和 MySQL 增加 native/optimized batch backend,减少网络往返并提升吞吐量。 ## PR 3: Native Batch SPI 与 PostgreSQL/pgx Backend * 在统一 backend 框架下增加 pgx native batch 能力,通过 `pgx.Batch`、`Queue` 和 `SendBatch` 减少网络往返,并保证使用当前事务对应的同一物理连接。 * native 执行仍需正确构建批次镜像、lock key 和 undo log,并处理 PostgreSQL transaction aborted、`RETURNING`、连接异常和逐项状态未知等情况。 * 无法证明与 semantic backend 等价的 SQL 会在执行前自动回退。 ## PR 4:MySQL Optimized Batch Backend * 为 MySQL 实现多行 INSERT 重写、batch 分片,以及受限的 UPDATE/DELETE fast path。所有重写必须保留 placeholder,所有 chunk 仍处于同一个本地事务、TransactionContext 和 AT branch 中 * generated key 无法可靠映射时直接回退 semantic backend * UPDATE/DELETE 只优化能够证明顺序、RowsAffected、trigger 和镜像语义等价的场景 ## PR 5:跨 Backend 一致性测试与 Benchmark * 建立统一 conformance suite,对比 semantic、PostgreSQL native 和 MySQL optimized backend 的最终数据、逐项状态、镜像、lock key、undo log、本地回滚和全局回滚结果。 * PR 3、PR 4 本身仍会包含各自的功能测试,PR 5 主要补充跨数据库、跨路径的系统性对照测试。Benchmark 将比较不同 batch size 下的吞吐量、延迟、网络往返、执行次数、内存分配和 undo log 开销,确认优化路径确实带来收益。 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
