2
0
Fork 0
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:
guaidaokakaxi 2024-03-07 16:03:20 +08:00 committed by GitHub
parent 08b375feb7
commit 6c7f30b4cd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

4
ch9.md
View file

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