rij*_*ooh 8 c# asp.net concurrency database-design web-applications
我有一个内部使用的ASP.NET C#业务webapp.我们遇到的一个问题是原始设计没有考虑并发检查 - 所以现在多个用户访问相同的数据并覆盖其他用户的更改.所以我的问题是 - 对于webapps,人们通常会使用悲观或乐观的并发系统吗?推动使用一个优先于另一个的偏好是什么以及需要考虑哪些设计考虑因素?
我目前倾向于乐观的并发检查,因为它似乎更宽容,但我担心可能会发生多次变化的可能性相互矛盾.
谢谢!
乐观锁。
悲观更难实现,并且会在网络环境中产生问题。什么操作会释放锁定并关闭浏览器?让会话超时?如果他们确实保存了更改怎么办?
您没有指定您正在使用哪个数据库。MS SQL 服务器有一个时间戳数据类型。虽然这和时间无关。它只是一个每次更新行时都会更改的数字。您不必执行任何操作来确保它发生更改,您只需检查它即可。您可以按照 @KM 建议使用上次修改的日期/时间来实现类似的效果。但这意味着您必须记住每次更新行时都要更改它。如果您使用日期时间,则需要使用具有足够精度的数据类型,以确保最终不会导致值在应有的时候不发生变化。例如,有人保存一行,然后有人读取它,然后发生另一次保存,但修改的日期/时间保持不变。除非需要跟踪记录上的最后修改日期,否则我会使用时间戳。
要检查它,您可以按照@KM的建议进行操作,并将其包含在更新语句的where子句中。或者您可以开始一个事务,检查时间戳,如果一切顺利,则执行更新,然后提交事务,如果没有,则返回失败代码或错误。
保持事务打开(如 @le dorfier 建议)与悲观锁定类似,但锁定的数据量可能超过一行。大多数 RDBM 默认情况下在页级别锁定。您还会遇到与悲观锁定相同的问题。
您在问题中提到您担心更新冲突。这就是锁定肯定会防止的。如果实施得当,无论乐观还是悲观都会阻止这种情况的发生。
| 归档时间: |
|
| 查看次数: |
1055 次 |
| 最近记录: |