在DDD中更新数据库记录容易出现更新丢失问题

问题描述 投票:0回答:1

我是第一次学习 DDD,在互联网上我看到了一种非常干净的更新数据库中值的模式。看起来像这样

  1. 使用存储库获取实体对象,加载到内存中
  2. 调用该实体上更新属性的方法,包含用于验证的业务逻辑
  3. 使用存储库将该实体保存回数据库

现在,我发现这种方法的唯一问题是,当并发用户尝试更新同一数据库记录时,会出现“更新丢失”。 我知道有一些技术可以锁定数据库记录,例如 SQL“SELECT FOR UPDATE”语句,从而启用悲观锁定。我只是想更好地了解大多数应用程序如何解决这个问题,因为我试图研究它,但没有找到该问题的任何直接答案

database rest concurrency backend domain-driven-design
1个回答
0
投票
我只是想更好地了解大多数应用程序如何解决这个问题,因为我试图研究它,但没有找到该问题的任何直接答案

常见答案:

    禁止并发访问;安排您的代码,以便只有一个活动“进程”有权写入实体。 例如,领导者选举协议。
  1. 锁定;也就是说,允许并发访问存储设备,但要求进程在执行其逻辑之前竞争获取“锁”。
  2. 条件写入;也就是说,我们允许对存储设备中的信息进行未锁定的并发访问,但更改存储的信息是通过比较和交换操作完成的。
© www.soinside.com 2019 - 2024. All rights reserved.