全面的乐观并发还是只是导致死锁的表?
Posted
技术标签:
【中文标题】全面的乐观并发还是只是导致死锁的表?【英文标题】:Optimistic concurrency across the board or just the table which is causing deadlocks? 【发布时间】:2015-11-11 01:39:04 【问题描述】:我正在使用旧版 EF 系统,这让我在更新时遇到了一些死锁。它使用悲观并发。我想摆脱这种情况,因此我允许更新表以支持乐观并发。我想知道我是否需要通过所有表实现乐观并发,还是只需要我认为死锁的表(正在更新的表)?任何想法都表示赞赏。
问候, 拉斯金
【问题讨论】:
【参考方案1】:您没有说明 RDBMS,也没有说明您的数据质量。
一些 RDBMS 允许不同阶段的锁定,您应该真正了解幕后发生的事情。如果您处理敏感数据(像我一样),数据完整性必须始终在性能或诸如死锁之类的烦人行为之前。这取决于您存储的数据。有时人们可以接受小的完整性破坏的风险......
我永远不会为了避免死锁而从悲观锁定变为乐观锁定...
您可能会毫无例外地遇到错误。一切似乎都运行良好,但一段时间后您发现您的数据已损坏...
我的建议:使用探查器来了解实际情况。大多数死锁的原因在于不良结构。如果您更改流程,大多数死锁都很容易避免。但这 - 尤其是与遗留软件相关的 - 可能很困难。
可能是,您的旧软件调用 RDBMS 中的代码(例如存储过程)可能是,您可以在不更改调用软件的情况下更改某些内容...
祝你好运!
【讨论】:
谢谢您,我使用的是 SQL(已标记),不确定您所说的数据“质量”是什么意思。我知道死锁不是魔鬼,有时你无法避免它们。所以这一切都是为了更好地管理死锁和你的数据以及编写更好的应用程序代码:) @Ruskin,关于“质量”,我说的是您正在处理的数据的“种类”。交易性财务数据是其他一些东西,例如天气测量数据。在我的工作中 - 正如我之前所说 - 数据完整性比性能更重要。 @Ruskin,还有一点:我向您询问了您的 RDBMS,您的回答是“SQL(标记)”。有必要说明您的产品(mysql、SQL Server、Oracle...)和版本。特别是关于锁定的问题在这些产品之间可能会有很大不同......以上是关于全面的乐观并发还是只是导致死锁的表?的主要内容,如果未能解决你的问题,请参考以下文章