跳到正文
SGSteven Guan

原子概念

并发记忆写入与幂等

version/CAS/事务、event ID去重、读后重试、细粒度事实项与冲突可见性。

要解决的问题两个Session同时更新同一用户档案,怎样避免互相覆盖?

检索别名:CAS · optimistic concurrency · lost update

BLUEPRINT局部蓝图

01 输入

  1. 事实当前版本与新事件
  2. expected revision和幂等ID
→

02 处理机制

  1. 事务或CAS检查读写版本
  2. 冲突后重新读取与语义裁决
  3. 幂等提交并返回实际revision
→

03 输出与证据

  1. 无丢失更新的事实状态
  2. 可审计冲突与重试

两个正确更新也可能合成错误结果

两个Session同时读取同一profile,一边更新语言偏好,另一边更新项目角色;若都提交整个旧档案,后写者可能覆盖先写者的新值。每个Agent各自推理正确,系统最终状态仍会丢失信息。这是并发写入问题,不能只靠提示词要求“不要覆盖”。

PostgreSQL事务隔离文档解释不同隔离级别及并发行为。实现可选择事务、行锁或乐观版本检查,关键是将读、比较和写组织成明确合同。更强隔离也可能要求应用处理重试,不能将数据库错误隐藏后假装记忆已保存。

小粒度与版本检查配合

建议为事实项保留version,提交时声明expected revision;冲突则读取最新值,重新判断是否仍需更新。profile可以使用受校验的patch减少全量改写,但patch也必须对应明确版本,不能按旧字段位置修改已变化的结构。

原始事件使用稳定event ID,记忆整理按事件幂等。任务重试、worker恢复或同一消息重复投递时,不应产生多个相同事实;但两个语义接近、时间不同的真实事件也不能被粗暴去重。

冲突保留语义决定

版本检查只发现同时修改,不能自动裁决谁更权威。用户明确纠正、正式资料更新和后台模型推断要按信任与时间处理。特别是旧后台job在用户撤回后完成时,必须拒绝恢复已禁用值,而不是因提交更晚就当成最新事实。

验收用可控并发同时更新不同字段、同一字段、纠正与撤回,检查无丢失更新、无重复事实和可解释冲突。再模拟提交成功但客户端超时,确认重试依赖幂等身份。需要报告真正落库的revision,而不是模型生成的“记住了”回复。

RELATIONSHIP MAP

与其他节点的关系

箭头从本节点指向目标;关系是工程分析映射,不代表厂商合作或已披露的内部实现。

哪些节点指向本页 · 2

PRIMARY SOURCES

来源与阅读边界

来源按研究截止日整理。官方文档说明能力和约束,代码只证明对应版本,论文与讲座不自动证明生产效果。 资料截止:2026-10-15。

  1. PostgreSQL:Transaction isolation ↗官方文档 / 声明
  2. Zep:expected_revision更新示例 ↗官方文档 / 声明