mysql - 您会选择使用悲观锁定的真实示例是什么?
问题描述
我已经阅读了很多关于何时使用乐观与悲观锁定的文章,我的基本理解是:
- 乐观锁定更具可扩展性,因此如果可能,可能会使用它
- 当允许并发更新没有意义时使用悲观锁定
我还没有找到任何有用的例子来说明何时选择悲观锁定是明智的(似乎乐观通常是首选)。
如果有人能回答一个具体的例子,那将非常有帮助:假设我们有一张信用卡/账户表,我们想要授权一笔交易。完整性非常重要,我不明白为什么允许并发更新会有用。这是我们将使用悲观锁定的示例吗?
解决方案
这几乎是过去这个问题的重复:乐观与悲观锁定
悲观锁定适用于您想要保证以原子方式锁定多个资源的情况。这有助于避免死锁。
乐观锁定依赖于非原子锁定,从某种意义上说,您可能需要在事务期间锁定多个资源,如果您乐观地获取锁,则一次执行一个,因此相对于其他并发存在竞争条件交易。
悲观锁定也有一些风险。如果事实证明您根本不需要锁定它们,您可能会不必要地锁定一些资源。它可能取决于您的事务逻辑,但您必须将它们锁定为原子锁请求的一部分,以防万一您确实需要它们。
推荐阅读
- java - 作者使用 thenCompose 而不是 thenComposeAsync 的原因是否正确
- vb.net - 在 VB.NET 中获取 List(Of List(Of String)) 的所有排列
- python - 从字典键视图中删除键
- python - Tkinter overridedirect(最小化和 windows 任务栏问题)
- php - 尝试下载 blob 时获取空值
- java - Android:在未聚焦时更改材料暴露轮廓下拉列表的提示文本颜色
- html - 如何在 td 标签内使图像大小响应?
- python - 对 for 循环中的变量范围感到困惑
- postgresql - 如何将 PostgreSQL 升级到 IDENTITY(或替代)?
- swift - 如果日期是过去,则 API 排除数据