我需要以一种不会被多个并发用户做相同事情的方式破坏的方式更新数据存储实体。
我了解我无法使用SQL来更新数据存储区,但是我不确定还有其他方法可以工作。
这是我将在使用SQL的RDBMS中实现的方法:
-- Account.Balance = current balance
-- Account.Rate = increase per second
-- Account.CheckDate = the last time the balance was checked and updated
-- so we need to find the number of seconds since the last check,
-- update the balance by rate*seconds, then update the check datetime
UPDATE Account
SET Account.Balance = Account.Balance + ( DATEDIFF(S, GETDATE(), Account.CheckDate) * Account.Rate),
Account.CheckDate = GETDATE()
我知道我可以将所有操作包装在一个事务中,但是如果不使用显示的SQL这样的单个更新操作,如何确保更新不会由于多个用户而导致计算错误呢?
您可能会看到一些操作,例如:
1. Read entity
2. Update values
3. Save entity
可能由于多个用户执行相同的操作而失败
我猜想有几种可能的方法可以实现这一目标,我正在寻找一种最能满足当前和未来需求的方法。
==================答案==================
当我达到这一点时,我意识到只要同时更新余额和支票日期,一切都会好起来的。并发更新不会破坏任何东西:)
但是我以为我还是会发布它!
我仍然很高兴看到更好的解决方案...
湖上湖
小怪兽爱吃肉
相关分类