首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微服务对共享数据库的并发更新。丢失的更新

微服务对共享数据库的并发更新。丢失的更新
EN

Stack Overflow用户
提问于 2021-04-13 00:06:06
回答 1查看 365关注 0票数 1

流程图

我们的微服务正在调用第三方服务,使用REST访问(读取/更新)共享数据库中的相同记录。

用例1:同一个微服务进行多次调用以访问相同的记录

  • 一位顾客购买了10台A产品
  • 另一位顾客购买了5台相同的产品A
  • UI在几毫秒内对端点/decrementProduct进行2次调用
  • 这两个呼叫可能会在当时读取相同的A产品库存计数,并且都会根据所读取的库存数量减少A产品的采购单位。

示例:

  • 呼叫前的库存清点: 10
  • 呼叫1减少5单位从10,并更新回5作为当前的库存计数。
  • 呼叫2减少2单位从10,并更新回8作为当前的库存计数。
  • 呼叫后的库存清点:8
  • 呼叫后正确的库存清点应该是:

用例2:多个微服务发出多个调用以访问同一个记录

在用例1中解释的问题将在本例中恶化,原因是更新数据库中相同记录的调用次数较多。

编辑:13-4-2021共享数据库使用REST向我们的微服务公开,我们对物理数据库和公开的REST没有任何控制,无法在数据库级别实现任何事务或锁定机制。

EN

回答 1

Stack Overflow用户

发布于 2021-04-13 07:44:22

我不知道您使用的是哪个数据库,但是传统的关系数据库如: oracle、postgresql、mysql、db2等等。已经使用正在更新的记录中的锁来解决此类问题,以确保不存在并发问题。

我的意思是,如果您打开一个事务,在其中读取一个值,然后更新它,就不会有任何问题,因为如果您尝试用当前设置的不同版本号(过时的版本)更新数据库中的一个行,数据库就不会让它更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67067104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档