加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

当数据库遇到分布式,你会怎么做?

发布时间:2020-03-08 16:46:45 所属栏目:MySql教程 来源:站长网
导读:副标题#e# 数据库通常有着完善的事务支持,但是局限于单机的存储和性能,于是就出现了各种分布式解决方案。最近读了《Designing Data-Intensive Applications》这本书,所以做一个总结,供大家做个参考,有什么不对的请大家指正,一起讨论。 数据模型 数据

因果一致性实现的难点在于如何定义和捕获因果关系,你需要知道哪个操作发生在哪个操作之前(happen before)。但是这种因果关系更多是来自上层应用,底层存储是无法感知的,所以跟踪所有的因果关系是不及实际的。

因果关系的操作在时序上一定是有先后,所以通过全序的的序列化或时间戳(逻辑时钟)来排序操作,这样所有的操作都有了时间上的因果先后关系。所以线性一致性是所有操作都满足因果一致性(即使大部分操作没有依赖关系)。

最终一致性

最终一致性不能算是一致性模型,没有任何一致性保证,只是说在没有更新的情况下,副本之间会在一定时间内保持一致。因为由于网络延迟的存在,应用任何时候都可能读取到不一致的数据。可以说是可接受的最弱的一致性模型。

以客户端为中心

上面讨论的以数据存储为视角的一致性,在因果一致性以及更强的一致性模型中,从客户端而言是不会发生预料之外的读写问题的。但是在更弱的一致性模型而言,出现各种读写问题。

以客户端为中心的一致性为单一客户端提供一致性保证,保证该客户端对数据存储的访问的一致性,但是它不为不同客户端的并发访问提供任何一致性保证。

以客户端为中心的一致性包含了四种模型:

单调读一致性(Monotonic-read Consistency):如果一个进程读取数据项 x 的值,那么该进程对于 x 后续的所有读操作要么读取到第一次读取的值要么读取到更新的值。即保证客户端不会读取到旧值。

单调写一致性(Monotonic-write Consistency):一个进程对数据项 x 的写操作必须在该进程对 x 执行任何后续写操作之前完成。即保证客户端的写操作是串行的。

读写一致性(Read-your-writes Consistency):一个进程对数据项 x 执行一次写操作的结果总是会被该进程对 x 执行的后续读操作看见。即保证客户端能读到自己最新写入的值。

写读一致性(Writes-follow-reads Consistency):同一个进程对数据项 x 执行的读操作之后的写操作,保证发生在与 x 读取值相同或比之更新的值上。即保证客户端对一个数据项的写操作是基于该客户端最新读取的值。

但是真实情况是,由于服务器负载均衡以及服务器故障的存在,会导致客户端会话会发生转移,因此基于客户端访问的一致性模型是不靠谱的。

共识协议

Lamport时间戳

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读