如果明天招牌蛋糕换了制作负责人,今天保存的分工就不能一直当成新答案。另一个情况是,关系数据库暂时连不上:系统还能查哪些资料,要怎样告诉店长?本节把这两种真实变化落到更新与降级代码中。
{{figure:11-update|图 5-15 更新以文档标识为单位,图事实和向量文本都需要同步处理。}}
本次实际更新练习使用 cake_owner_update.json:owner-cake 的新版分工将招牌蛋糕负责人从小林改为小梅。旧版事实必须清理,但不能顺手删除小林,因为草莓酱与巧克力饼干仍由小林负责。
doc_id 标识逻辑文档;version 标识本次版本;chunk_id 标识具体文本块。删除文档对应的事实与原文,保留可能被其他文档引用的共享实体,是本实现的基本边界。
{{snippet:remove-document}}
关系按 知识域 和 文档编号 删除,文本块与文档节点也在相同范围内处理。这个动作不是删掉数据库里所有叫“套餐”的节点;两个知识域的同名对象应该互不影响。
更新采用替换该文档的方式,在 Neo4j 内通过事务保持这份文档的事实与文本一致。导入整批数据时,不同文档仍分别处理,不能说整批数据和两种数据库都处于同一原子事务。
{{snippet:ingest-journal}}
编排层记录 Milvus 与 Neo4j 各自是否完成。如果一边成功、一边失败,日志保留未完成状态;修复连接后重新执行幂等导入,恢复一致性。这个日志是教学实现的补偿起点,并不自动等价于成熟的变更队列、事务发件箱或自动恢复服务。
课堂练习应在增强版数据副本中运行:使用配套蛋糕负责人更新记录,更新版本、事实与引用;查询是否返回小梅;随后恢复原课程数据。不要在原始项目数据或真实业务库上进行破坏性练习。
{{figure:11-degrade|图 5-16 降级响应带上通道警告,不能把图服务不可用说成“查证没有影响”。}}
{{snippet:channel-errors}}
编排层区分空候选与异常:没找到实体时图通道正常返回空列表;连接失败或超时时带上 warnings。可用的向量候选继续参与融合,但回答只能基于这次真正拿到的证据。
数据库层限制每次查询时间;编排层限制通道等待时间。取消一个任务不保证底层操作立即停止,所以还要通过查询本身的边界、连接超时与服务监控控制负载。
| 演练 | 正确观察点 |
|---|---|
删除 menu-tea 套餐组成资料 |
双人下午茶包含蛋糕的关系消失;owner-tea 与 sales-tea 的分工和销售资料保留 |
| 当前店与实验分店分别问双人下午茶负责人 | 各自返回对应店员,引用不跨域 |
| 模拟图连接错误 | 向量结果可用时继续回答,同时返回图通道警告 |
自动验证脚本会完成隔离演练并恢复基线。学生手动练习时,应先确认当前连接的是增强版独立环境。下一节用统一问题集比较三种检索方式,让图检索的收益与代价都能被观察到。