Files
ai-contract-platform/project-docs/V2-database-performance-baseline-2026-06-24.md
yuqei a3bb78e06b
Security Quality Gate / npm audit, Bandit, pip-audit, detect-secrets (pull_request) Failing after 16m35s
release: freeze V2 release candidate
2026-07-12 15:32:24 +08:00

5.3 KiB
Raw Permalink Blame History

AI 合同平台 V2 数据库性能基线推进记录

日期:2026-06-24

本轮结论

对照《AI 合同平台 V2 数据库优化重构方案》,当前数据库重构没有跑偏。

已经完成:

  • DB-0:数据库现状冻结,已形成当前状态记录。
  • DB-1:最终数据库工程基线,已推进到合同库、AI 库、运维库三库边界,合同 API 与 AI Platform 分别维护 Alembic 链。
  • DB-5 的一部分:补齐当前 MVP 查询路径的核心组合索引、PostgreSQL 模糊检索索引、知识库向量检索索引的可恢复基线。

仍未完成:

  • DB-2:Contract Platform 清洁领域模型仍未完全落地,包括 tenant、用户、角色、审批实例、审批步骤、正式合同版本、履约义务、归档等最终表模型。
  • DB-3:AI Platform 清洁领域模型仍未完全落地,包括 tenant 隔离、AI run step、retrieval trace/hit、结构化质量标签等最终表模型。
  • DB-4:全表租户隔离与权限边界尚未完成。
  • DB-5:还缺 EXPLAIN 级别的真实 PostgreSQL 查询计划验证、慢查询样本、数据量压测。
  • DB-6:RLS、独立数据库账号、备份恢复演练、append-only 审计约束尚未完成。

本轮完成内容

合同库

新增迁移:

yuqei-contract-platform/services/contract-api/migrations/versions/20260624_0008_add_database_performance_indexes.py

覆盖当前主流程查询:

  • 合同列表:status + updated_at + id
  • 我的合同/负责人视角:owner + updated_at + id
  • 审批时间线:contract_id + created_at + id
  • 合同审计时间线:contract_id + created_at + id
  • 审计类型筛选:event_type + created_at + id
  • 合同附件列表:related_contract_id + uploaded_at + id
  • 附件状态筛选:status + uploaded_at + id
  • 审查任务列表:contract_id + created_at + id
  • worker 领取队列:status + created_at + id
  • 审查任务状态页:status + updated_at + id

PostgreSQL 环境下额外启用 pg_trgm,为当前 ILIKE '%keyword%' 搜索补充 GIN trigram 索引:

  • 合同标题、相对方、负责人、正文摘要、正文内容
  • 附件名称、上传人
  • 审查任务标题、摘要、发起人

AI 库

新增迁移:

yuqei-ai-platform/services/ai-platform-api/migrations/versions/20260624_0015_add_database_performance_indexes.py

覆盖当前 AI 中台高频查询:

  • 模型参数发布记录:provider config + created_at
  • Prompt 发布记录:template/version/name/operation + created_at
  • 知识库文档:knowledge_base/status/import_batch + created_at
  • 知识库 chunk:knowledge_base/document/import_batch/chunk_index
  • 知识库重建索引记录:knowledge_base/import_batch/status + created_at
  • 知识库导入 worker 队列:status/knowledge_base/import_batch + updated_at
  • AI Trace:operation/status/quality/provider/model/prompt/provider_config + created_at
  • 质量改进项:status/owner/action_type/dimension/key/prompt/knowledge_base/import_batch + updated_at
  • worker 手动执行记录:worker/status + started_at

PostgreSQL 环境下额外启用:

  • pg_trgm:用于知识库标题、引用、正文,以及 AI 问题/回答的模糊检索。
  • vector:用于知识库 chunk 的 pgvector 检索。
  • ix_knowledge_chunks_embedding_hnsw:针对默认 64 维 embedding 的 HNSW 索引。该索引使用可恢复执行方式,如果目标 PostgreSQL/pgvector 版本不支持表达式 HNSW,不阻断迁移,后续可在 embedding 维度最终标准化后强制收口。

迁移工程修复

AI Platform Alembic 入口补齐 SQLite 父目录创建:

  • yuqei-ai-platform/services/ai-platform-api/migrations/env.py
  • yuqei-ai-platform/services/ai-platform-api/src/yuqei_ai_platform_api/repository.py

这样本地和 CI 可以直接用空 SQLite 文件验证完整 Alembic 链,不会因为 .runtime 目录不存在失败。

验证结果

已通过:

  • python -m py_compile 新增迁移与 AI repository/Alembic env
  • 合同库空 SQLite 迁移到 head
  • AI 库空 SQLite 迁移到 head
  • 索引名长度检查:新增索引均不超过 PostgreSQL 63 字符限制
  • python -m pytest yuqei-contract-platform\services\contract-api\tests -q:24 passed
  • python -m pytest yuqei-ai-platform\services\ai-platform-api\tests -q:37 passed
  • python -m pytest yuqei-ai-platform\services\worker\tests -q:5 passed
  • V2 smoke Docker 从空库重建并通过:project-docs/qa-artifacts/v2-smoke-docker-deploy/2026-06-24T18-23-45
  • 真实 PostgreSQL 检查:
    • 合同库 Alembic 版本:20260624_0008
    • AI 库 Alembic 版本:20260624_0015
    • 合同库存在组合索引和 pg_trgm 扩展
    • AI 库存在组合索引、pg_trgm、vector 扩展和 ix_knowledge_chunks_embedding_hnsw

未在本轮执行:

  • 大数据量 EXPLAIN ANALYZE。
  • 慢查询采样和压测。

下一步建议

下一轮建议继续 DB-5 的真实 PostgreSQL 验证:

  1. 在 V2 smoke Docker 环境从空库执行合同库和 AI 库迁移。
  2. 检查 pg_trgm、vector、HNSW 索引创建状态。
  3. 插入或导入一批合同、文件、审查任务、知识库 chunk、AI Trace 样本。
  4. 对合同列表、统一搜索、AI Trace 看板、知识库检索、worker 队列领取执行 EXPLAIN ANALYZE。
  5. 形成 V2-database-postgresql-explain-baseline 文档。

DB-5 真实验证完成后,再进入 DB-2/DB-3 的领域模型重构会更稳。