- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我觉得问这个问题有点愚蠢,但为了把事情弄清楚,有时必须问一些愚蠢的问题:)
因此,我们可以像 Martin Kleppmann 在他的演讲中所做的那样定义写入偏差:
Write skew pattern:
1. read something
2. make a decision
3. write decision
By the time the write(3) is committed, the premise(1) of the decision(2) is no longer true
有一种悲观的方法,当我们基本上说“在给定时刻只有一个主题可以使用共享资源,其他人应该等待主题完成”。
还有一种乐观的方法,其阶段如维基百科中所定义:
I. Begin: Record a timestamp marking the transaction's beginning.
II. Modify: Read database values, and tentatively write changes.
III. Validate: Check whether other transactions have modified data that this transaction has used (read or written). This includes transactions that completed after this transaction's start time, and optionally, transactions that are still active at validation time.
IV. Commit/Rollback: If there is no conflict, make all changes take effect. If there is a conflict, resolve it, typically by aborting the transaction, although other resolution schemes are possible.
我的问题是,我们有什么保证在验证 (III) 发生时不会写入新的“知识”,从而满足上面给出的写入偏差的定义?
基本上,阶段 III 的验证模块必须保留一些内部分类账并以串行方式处理它们,以便交易 2 的检查过程不会在交易 1 写入事件之前发生。
我们是否刚刚将整个写倾斜问题下移了一层?所以我们在低层次上有一个可序列化的悲观方法,以便能够在更高层次上有一个乐观的方法?我弄错了什么吗?
如有任何说明,我将不胜感激。
最佳答案
为了使乐观锁定起作用 'III.验证'和'IV。 Commit/Rollback' 需要是单个原子操作。所以从这个意义上说,是的,“我们只是将整个写偏斜问题下移了一个级别”。
但是,'II.修改'是数据库控制之外的用户操作,可能需要很长时间才能完成,并且无法通过数据库实现进行优化。 '三。验证'和'IV。 Commit/Rollback' OTOH 是由数据库实现的操作,可以通过数据库实现优化为快速。
关于optimistic-locking - 乐观并发控制和写入偏斜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56576192/
我正在编写一个 Web 应用程序,两个不同的用户可以在其中更新事物列表,例如待办事项列表。我已经意识到,乐观锁定机制效果最好,因为我不希望出现高争用情况。 我一直在查看事务隔离级别,现在我有点困惑。看
这个问题在这里已经有了答案: Pessimistic versus Optimistic Concurrency (Locking versus Feedback) (3 个答案) 关闭 8 年前。
我是一名优秀的程序员,十分优秀!