Skip to content

PostgreSQL 与 Milvus 双存储怎样保证数据一致性?

题型:深入 · 不要承诺不存在的分布式事务,要说明最终一致和修复机制。

建议回答

PostgreSQL 作为元数据和任务状态的事实来源,documentId、documentVersion、chunkId 在解析阶段生成并保持稳定。Ingestion 通过状态机记录解析、切分、Embedding、Milvus 写入、全文索引和发布等阶段,每一步都可幂等重试。新版本完成两套索引后再把文档状态切换为可检索,在线查询只读取已发布版本。

如果 PostgreSQL 成功而 Milvus 失败,任务保持未发布并继续补偿;如果 Milvus 写入成功但状态更新失败,使用相同主键 upsert,恢复时通过任务记录重放。后台对账任务比较各版本 chunk 数量、ID 集合和校验摘要,发现孤儿向量或缺失记录后修复或重建。

关键设计

  • 稳定主键加 upsert,保证重试幂等。
  • 版本化发布,避免用户读到半成品。
  • 删除采用先失效、后异步清理,避免检索窗口泄漏旧数据。
  • 权限和租户字段在两边保持一致,并纳入对账。

易错点

  • 双写不能简单包装在一个本地事务里。
  • 只比较数量不够,还要校验版本、ID、权限和内容摘要。

知识关系

从当前问题继续深入,或者回到提出这个问题的知识入口。