gpt4 book ai didi

c# - 当多个用户可以编辑相同数据时首选数据库/webapp 并发设计

转载 作者:太空狗 更新时间:2023-10-29 19:38:16 29 4
gpt4 key购买 nike

我有一个内部使用的 ASP.NET C# 业务 Web 应用程序。随着我们的成长,我们遇到的一个问题是原始设计没有考虑并发检查——所以现在多个用户正在访问相同的数据并覆盖其他用户的更改。所以我的问题是——对于 web 应用程序,人们通常使用悲观还是乐观的并发系统?是什么驱使人们偏爱使用其中一种,需要考虑哪些设计注意事项?

我目前倾向于乐观的并发检查,因为它看起来更宽容,但我担心进行的多项更改可能会相互矛盾。

谢谢!

最佳答案

乐观锁。
悲观主义更难实现,并且会在网络环境中产生问题。什么 Action 会释放锁,关闭浏览器?离开 session 超时?如果他们确实保存了他们的更改呢?

您没有指定正在使用的数据库。 MS SQL 服务器具有时间戳数据类型。虽然这与时间无关。它只是一个数字,每次更新行时都会发生变化。您不必做任何事情来确保它得到改变,您只需要检查它。您可以使用 @KM 建议的最后修改日期/时间来实现类似的效果。但这意味着您必须记住在每次更新行时更改它。如果您使用 datetime,您需要使用具有足够精度的数据类型,以确保您不会以该值未更改而结束。例如,有人保存了一行,然后有人读取了它,然后又发生了一次保存,但修改后的日期/时间保持不变。除非需要跟踪记录的最后修改日期,否则我会使用时间戳。

要检查它,您可以按照@KM 的建议将其包含在更新语句 where 子句中。或者您可以开始一个事务,检查时间戳,如果一切正常就进行更新,然后提交事务,如果没有则返回失败代码或错误。

保持事务打开(如@le dorfier 所建议)类似于悲观锁定,但锁定的数据量可能不止一行。默认情况下,大多数 RDBM 的锁定在页面级别。您还会遇到与悲观锁定相同的问题。

您在问题中提到您担心更新冲突。这就是锁定肯定会阻止的。如果实现得当,乐观或悲观都会完全阻止这种情况。

关于c# - 当多个用户可以编辑相同数据时首选数据库/webapp 并发设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835674/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com