vocabulary-import-reliability-2026-10-30.md 3.1 KB

Excel 词库导入可靠性修复(2026-10-30)

原因与改动

旧预检逐行查询词库,80 行线上实测 27.502 秒,超过管理端 20 秒请求限时。改为一次集合查询匹配 GeneralID / 单元与单词;保留旧表头、有效目录、重复行和跨帐套校验。保存与预检共用字段长度规则(单词 200、释义 4000、音标 500、例句 8000、音频地址 2000)。

新客户端通过 incremental:true 分批提交,每次最多 5 行、约 5 秒后在行边界停止,逐行保存结果。事务级 advisory lock 防止同一批次重叠写入;连接终止后锁自动释放。失败重试只处理失败行,已成功 / 无变化行跳过。每行响应丢失后的恢复仍通过现有“单元+单词”查重避免重复创建。旧客户端仍收到完整终态,失败返回 409,不会把部分完成当全部成功。

页面显示真实进度、失败行号、单词及具体原因;超时先回读状态,不能把失去响应判成整批失败。只将批次 ID 存入按当前管理员与帐套隔离的 sessionStorage,刷新或重进页面可恢复,完成后清除;不缓存原始 Excel 或凭证。导入中的弹窗、目标单元和文件选择不能切换。导入请求单独使用 60 秒上限,其他接口维持 20 秒。

验证

  • 后端 11 项:旧表头 / 目录 / 重复规则、2000 行单次查询、所有长度边界、分批进度、仅失败行重试、并发互斥和旧客户端兼容。
  • 管理端:相关集合 45 项通过;新增按管理员恢复批次测试后,OperationsService 单独 22 项通过(相关测试合计 46 项)。覆盖已完成响应丢失回读、未完成进度保留、逐行错误、实际成功数量、阻止重复点击、刷新恢复入口,以及导入专用超时。
  • 管理端生产构建、11 个云函数定义语法校验通过;管理读取回归 5 项通过,包括词库读取不得重复加表锁。
  • 隔离临时管理员函数连接真实数据库,未替换正式网关:80 行预检 2.040 秒;2000 行 1.428 秒。这是本次样本测量,不是持续性能承诺。
  • 隔离创建 8 条专用测试词条,模拟 1 行字段超限:4 次提交分别约 6.5 / 6.3 / 8.1 / 6.1 秒,最终 7 成功、1 失败并返回“释义不能超过 4000 个字符”。修正后仅补该行,8 条完成;重放提交后仍只有 8 条。临时分类、词条及附表、批次均已清理,审计记录保留;回读词汇总数仍为 106,521,测试分类和批次数为 0。

本机详细证据:忽略目录 tmp/vocabulary-audit/,其中 fixed-performance.json、fixed-commit.json 为真实数据库隔离验证记录。正式接口和管理端已于 2026-10-30 发布,部署及正式接口验收见 当天上线记录。

发布要求

先对线上运营网关选择性更新词库校验 / 预检 / 分批提交 / 状态函数,保留线上其他独立修复,再发布管理端。无需新建数据表或迁移字段,进度复用 ContentImportBatch 的既有字段。不要整份覆盖线上网关;保留回退基线。新前端依赖新接口的增量协议,应按此顺序发布。