From 6c7f30b4cddae7d7b9054c55a40f8be9773c072b Mon Sep 17 00:00:00 2001 From: guaidaokakaxi Date: Thu, 7 Mar 2024 16:03:20 +0800 Subject: [PATCH] Update ch9.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 感觉这里强调的是“读写”这件事的线性一致性,隐含了比如不能保证“写写”的线性一致性 --- ch9.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ch9.md b/ch9.md index e540f07..737f678 100644 --- a/ch9.md +++ b/ch9.md @@ -236,7 +236,7 @@ 有趣的是,通过牺牲性能,可以使 Dynamo 风格的法定人数线性化:读取者必须在将结果返回给应用之前,同步执行读修复(请参阅 “[读修复和反熵](ch5.md#读修复和反熵)”) ,并且写入者必须在发送写入之前,读取法定数量节点的最新状态【24,25】。然而,由于性能损失,Riak 不执行同步读修复【26】。Cassandra 在进行法定人数读取时,**确实** 在等待读修复完成【27】;但是由于使用了最后写入胜利的冲突解决方案,当同一个键有多个并发写入时,将不能保证线性一致性。 -而且,这种方式只能实现线性一致的读写;不能实现线性一致的比较和设置(CAS)操作,因为它需要一个共识算法【28】。 +而且,这种方式只能实现读写的线性一致;不能实现线性一致的比较和设置(CAS)操作,因为它需要一个共识算法【28】。 总而言之,最安全的做法是:假设采用 Dynamo 风格无主复制的系统不能提供线性一致性。 @@ -257,7 +257,7 @@ 另一方面,如果使用单主复制,则主库必须位于其中一个数据中心。任何写入和任何线性一致的读取请求都必须发送给该主库,因此对于连接到从库所在数据中心的客户端,这些读取和写入请求必须通过网络同步发送到主库所在的数据中心。 -在单主配置的条件下,如果数据中心之间的网络被中断,则连接到从库数据中心的客户端无法联系到主库,因此它们无法对数据库执行任何写入,也不能执行任何线性一致的读取。它们仍能从从库读取,但结果可能是陈旧的(非线性一致)。如果应用需要线性一致的读写,却又位于与主库网络中断的数据中心,则网络中断将导致这些应用不可用。 +在单主配置的条件下,如果数据中心之间的网络被中断,则连接到从库数据中心的客户端无法联系到主库,因此它们无法对数据库执行任何写入,也不能执行任何线性一致的读取。它们仍能从从库读取,但结果可能是陈旧的(非线性一致)。如果应用需要读写的线性一致,却又位于与主库网络中断的数据中心,则网络中断将导致这些应用不可用。 如果客户端可以直接连接到主库所在的数据中心,这就不是问题了,那些应用可以继续正常工作。但只能访问从库数据中心的客户端会中断运行,直到网络连接得到修复。