文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

数据库的并发操作与一致性

2024-12-03 06:08

关注

作为分布式强一致数据库的开发者, 被多次问到:

如果我在新加坡和欧洲同时修改一条记录, 如在新加坡 set a=1, 在欧洲 set a=2, 结果 a 是多少?

我的回答是:

可能是 a=1, 也可能是 a=2.

然后提问者会非常困惑和不满:

你不是说数据库是强一致的吗? 为什么结果不确定呢?

我非常理解他的困惑, 但是, 他所提到的"并发操作"和"一致性"并没有必然的联系.

并发

Martin Kleppmann 提到并发(Concurrency)的定义:

For defining concurrency, exact time doesn’t matter: we simply call two operations concurrent if they are both unaware of each other, regardless of the physical time at which they occurred.

要定义并发, 时间并不是一个影响因素: 如果两个操作不知道对方(的开始和结束以及结果), 无论物理时间上他们何时发生, 我们都称这两个操作是并发的.

有这样的例子:

于 00:00:00 时间, 向服务器发起请求 A, 服务器一直没有返回结果. 然后, 于 00:00:03 时间(显然在上一个请求发起"之后"), 再向服务器发起请求 B.

那么, 是不是我们就能说 B 是在 A 之后呢? 结论是不能, 这两个操作是并发操作! 虽然我们明确知道 B 是在 A 发起之后才发起, 但在 B 发起之时, (B)并不知道 A 的结果, 根据 Martin Kleppman 的定义, 两个操作是并发的.

从时间区间上面来理解并发, 可能会更好. 一个操作由开始时间点和结束时间点, 组成一个时间区间, 如果两个操作的时间区间有重叠, 则这两个操作无法区分先后.

另一种定义并发的方法是:

  1. Martin Kleppmann:  An operation A happens before another operation B if B knows about A, or depends on A, or builds upon A in some way. 

如果不属于此种情况, 即为并发.

一致性

一致性和3个因素密切相关:

我所理解, 一致性便是唯一预期. 也就是给定输入条件, 能推导出唯一的结果. 对于某个操作场景, 无论我们重复验证多少次, 观察多少次(时间), 在哪里观察(空间), 结果都恒定.

如果读操作(观察)是在写操作之后, 那么观察结果就是我们所预期的那一个确定的结果.

如果读操作和写操作是并发的, 那么, 可能观察到旧值, 也可能观察到新值. 但是, 一旦观察到新值, 之后便不可能再观察到旧值(也即 Linearizable 的意思).

 

来源:推酷内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯