首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >乐观并发控制和写斜

乐观并发控制和写斜
EN

Stack Overflow用户
提问于 2019-06-13 08:15:25
回答 1查看 363关注 0票数 3

我觉得问这个问题有点愚蠢,但为了澄清问题,有时必须问一些愚蠢的问题:)

因此,我们可以像马丁·克莱普曼( Martin Kleppmann )在他的演讲中所做的那样,定义一个写作偏斜:

写入斜模式: 1.读某事 2.作出决定 3.书写决策 当提交写(3)时,决策(2)的前提(1)不再成立。

有一种悲观的方法,当我们基本上说“在给定的时刻只有一个主题可以使用共享的资源,其他人应该在主题完成之前等待”。

然后是一种乐观的方法,如维基百科所定义的阶段:

开始:记录一个标记交易开始的时间戳。 修改:读取数据库值,并暂时写入更改。 验证:检查其他事务是否修改了此事务所使用的数据(读或写)。这包括在事务启动后完成的事务,以及在验证时仍处于活动状态的事务。 提交/回滚:如果没有冲突,则使所有更改生效。如果有冲突,请解决它,通常通过中止事务来解决,尽管其他解决方案是可能的。

我的问题是,当验证(III)发生时,我们有什么保证新的“知识”没有被写入,从而实现了上面给出的写倾斜的定义?

基本上,第三阶段的验证模块必须保存一些内部分类账并按顺序进行处理,以便在transaction2写入事件之前不会发生来自transaction1的检查过程。

我们是不是刚刚把这个写的问题向下倾斜了一个层次呢?那么,我们在低层次上有一个可序列化的悲观方法,能够在更高的层次上有一个乐观的方法吗?我是不是出什么问题了?

如有任何澄清,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-13 08:39:45

要使乐观锁定工作,“III.Validate”和“IV.Commit/Rollback”需要是一个单一的原子操作。因此,在这个意义上,是的,“我们只是移动了整个问题,写倾斜了一个层次”。

但是,“II.Modify”是在数据库控制之外的用户操作,它需要很长时间才能完成,并且不能通过数据库实现进行优化。“'III.验证”和“IV.Commit/Rollback”OTOH是由数据库实现的操作,可以通过数据库实现进行优化以实现快速。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56576192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档