README.md 4.8 KB

第三轮提速与月度计薪

用户目标:费用数据变化后完整重算尽量接近 1 秒,不以旧结果掩盖延迟;学生端、老师端同步提速,验证后上线。后续明确采用按月计算:未变化的历史月份复用,补录、更正、删除、跨月移动时重算受影响月份。

验收口径

  • 费用:真实汇总、完整来源核验状态、教师明细和完整导出可用。金额、来源版本、截止核验版本、异常、门店范围、历史总数均与原版一致。每轮清空普通结果缓存后比较,不能用缓存命中充当全算。
  • 月度收入:四个原有收入字段与原算法一致;历史月份不变时金额计算调用为零;单月变化只重算受影响月份。月度汇总是派生的应得收入,绝非审核或发放账本,不自动冻结草稿、不修改已结算工资。
  • 移动端:老师当天任务全部分页到齐才算可用;学生首页余额/资料准确,排课、账号、记录、复习日历保持完整内容与功能。
  • 当前数据的来源存在性、重复代表、作废、历史补充抑制、规则、审批与异常判定仍由原始记录和原规则决定。派生索引缺失或过期时实时重建,维护/规则异常时回退原读取。

实现

  1. 事务快照中只构造一次核验来源,保留全部历史核验文本,仅传输所选月份候选详情;未知日期及重复身份保守保留。原始四个财务核验函数不改。
  2. 来源投影在写入时按记录维护,读取时核对当前依赖签名;当两个写入交错提交时,不信任旧投影。无公司级维护锁,争用时跳过派生写入,当前读取自行修复。
  3. 保持原排序规则及原始 MD5 字节,用一次文本展开避免比较中反复解压;仅关联所需 model 59 摘要。费用身份资料只取实际使用的显示/身份字段,保留 phone 与全部历史别名。
  4. 逐月保存整数分金额、待核对数、完整输入/计算器 SHA-256。来源与已存月份代次同属一个只读快照,条件写回防止旧计算覆盖新代次;复习收益仍实时读取。
  5. 复习查询缩小关联范围,独立 SQL 有限并发,老师多页任务有限并发;学生首页仅取所需资料,纯读取不再错误广播数据变更。

证据与边界

  • mobile-report.md / mobile-benchmark.json:真实教师/学生记录的 operator-bound 只读投影,10 对接口比较。不是模拟用户登录。
  • mobile-frontend-report.md:固定匿名夹具下的 Angular 生产构建浏览器配对测试及两种宽度截图。不是线上真实用户分位数。
  • teacher-monthly-report.md:真实运行时、24 个月复用及单月更正等价性;来源索引之前的月度复用本身没有明显整体提速,因此另测组合方案。
  • payroll-api-isolated.json / teacher-api-isolated.json:隔离数据库复制数据的完整对照,计时排除项写在文件中。静态性能复制不替代真实触发器并发测试。
  • source-index-concurrency.json:真实 PostgreSQL 事务、真实摘要触发器、乱序提交、过期投影和写入成本;所有修改仅在随机私有 schema 中,测试后删除。
  • admin-release-verification.json / mobile-release-verification.json:发布后的公网与页面回读(完成后生成)。单次上线冒烟不冒充 p75。

源码提交必须只包含本批文件;不提交本地原始响应、账户数据、凭据、完整数据库副本。私有候选、回滚备份和发布凭据位于 /Users/mac/.local/state/xiaoshu/cloud-releases/2026-11-10-speed-round3。

payroll-source-bulk.sql 与对应测试保留为早期实验复现,最终运行路径不依赖它,因此不在发布迁移清单中。

发布与回滚

release.mjs prepare 只生成候选、精确函数白名单审计及 SQL;install 在锁超时保护的事务中预检同名对象、原有 39 函数与摘要健康状态,只安装本批派生结构;rehearse 实际演练删除派生对象并回滚事务。publish 校验线上基线后只替换两网关白名单函数,并回读校验。

静态只发布移动端 H5;原生安装包不在本批范围。先上传带内容哈希的新资源,逐文件验证,再切换 manifest/index 并刷新现有 CDN。管理端本批没有静态源码变化。

回滚顺序:先在网关当前哈希仍等于本批发布哈希时恢复私有 admin-gateway.json、mobile-gateway.json 原代码并回读;再恢复 mobile/baseline 的 manifest/index、刷新并回读。确认没有本批网关在使用新结构后,执行 release.mjs rollback,只删本批触发器、派生表、函数及索引;不使用 CASCADE,未知依赖会阻止回滚。新派生对象删除前后均比较原有函数定义。任何来源业务表、工资审核/付款记录均不属于回滚删除范围。