8
回答
请问如何处理数据的一致性?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

请教下,假如有这种场景:A,B用户同时通过WEB应用获得对某条数据的修改权限,

如果A先修改了该条数据,并提交到数据库。

请问B可以再修改该数据吗?如果不能修改的话,该怎么处理?

如果能修改的话,请说明理由。谢谢。

我个人觉得B应该是不能再修改该数据的。

 

举报
programtic
发帖于6年前 8回/289阅
共有8个答案 最后回答: 6年前

据我所知,这种情况只有一些商业中间件能达到这种能力,例如CICS,TUXEDO

这种东西一般只有在银行/电信的核心交易系统会有这样严格要求。

类似HP开发的PICSSO也有部分这种能力,那个都是处理后台服务票据的,但是这种能力也不完全。

 

--- 共有 1 条评论 ---
programtic是的,实时性的,访问量大,涉及到金钱的系统,应该就会有这种场景。 6年前 回复
乐观锁
--- 共有 1 条评论 ---
szf正确! 程序员需要关注的是,乐观锁要更新时有冲突怎么处理,程序执行流程如何变化,这在使用任何技术,任何中间件都是一样的。 6年前 回复

如果没有使用持久层框架及二级缓存,那么B用户的会话update时在where条件中应该加上自己修改前字段的值,比如update tab set c1 = :p1 where id=:p2 and c1=:p3,如果更新到的记录数=0,则表示有数据行的冲突,需要在应用程序这一层处理。

如果使用了持久层框架,要视乎框架是哪个,很可能是B用户update时因为原记录被修改过,就直接抛出异常了。

--- 共有 1 条评论 ---
programtic谢谢。 update的时候,应该都可以更新的,因为一般更新数据,是以数据的主键作为条件的。 另外,我觉得这个跟是否使用框架,应该没有关系啊。 6年前 回复
举个例子:火车票还剩余1,两个程序同时进行买操作,微观上肯定有一个先买了,买了后commit事务后第二个才能去-1,在该字段上约束column>0,第二个等待-1时报错,程序捕捉返回票已售完
顶部