mirror of
https://github.com/Vonng/ddia.git
synced 2026-06-21 00:47:05 +08:00
Update ch9.md
感觉这里强调的是“读写”这件事的线性一致性,隐含了比如不能保证“写写”的线性一致性
This commit is contained in:
parent
08b375feb7
commit
6c7f30b4cd
1 changed files with 2 additions and 2 deletions
4
ch9.md
4
ch9.md
|
|
@ -236,7 +236,7 @@
|
|||
|
||||
有趣的是,通过牺牲性能,可以使 Dynamo 风格的法定人数线性化:读取者必须在将结果返回给应用之前,同步执行读修复(请参阅 “[读修复和反熵](ch5.md#读修复和反熵)”) ,并且写入者必须在发送写入之前,读取法定数量节点的最新状态【24,25】。然而,由于性能损失,Riak 不执行同步读修复【26】。Cassandra 在进行法定人数读取时,**确实** 在等待读修复完成【27】;但是由于使用了最后写入胜利的冲突解决方案,当同一个键有多个并发写入时,将不能保证线性一致性。
|
||||
|
||||
而且,这种方式只能实现线性一致的读写;不能实现线性一致的比较和设置(CAS)操作,因为它需要一个共识算法【28】。
|
||||
而且,这种方式只能实现读写的线性一致;不能实现线性一致的比较和设置(CAS)操作,因为它需要一个共识算法【28】。
|
||||
|
||||
总而言之,最安全的做法是:假设采用 Dynamo 风格无主复制的系统不能提供线性一致性。
|
||||
|
||||
|
|
@ -257,7 +257,7 @@
|
|||
|
||||
另一方面,如果使用单主复制,则主库必须位于其中一个数据中心。任何写入和任何线性一致的读取请求都必须发送给该主库,因此对于连接到从库所在数据中心的客户端,这些读取和写入请求必须通过网络同步发送到主库所在的数据中心。
|
||||
|
||||
在单主配置的条件下,如果数据中心之间的网络被中断,则连接到从库数据中心的客户端无法联系到主库,因此它们无法对数据库执行任何写入,也不能执行任何线性一致的读取。它们仍能从从库读取,但结果可能是陈旧的(非线性一致)。如果应用需要线性一致的读写,却又位于与主库网络中断的数据中心,则网络中断将导致这些应用不可用。
|
||||
在单主配置的条件下,如果数据中心之间的网络被中断,则连接到从库数据中心的客户端无法联系到主库,因此它们无法对数据库执行任何写入,也不能执行任何线性一致的读取。它们仍能从从库读取,但结果可能是陈旧的(非线性一致)。如果应用需要读写的线性一致,却又位于与主库网络中断的数据中心,则网络中断将导致这些应用不可用。
|
||||
|
||||
如果客户端可以直接连接到主库所在的数据中心,这就不是问题了,那些应用可以继续正常工作。但只能访问从库数据中心的客户端会中断运行,直到网络连接得到修复。
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue