我的复制因子为3,一致性级别为LOCAL_QUORUM。我的群集大小为5。
使用LOCAL_QUORUM,我的客户端在将数据写入两个节点后写入结果成功。但是如何复制到第三个节点,比如cassandra如何选择第三个节点,以及cassandra在第三个节点上无法复制的内容是什么时候?
我需要更多地了解复制部分。因为如果用于写入的两个节点中的一个失败,那么我的读取将无法实现LOCAL_QUORUM一致性。
答案 0 :(得分:2)
当您使用LOCAL_QUORUM
进行书写时,您正在写入所有节点,但您只能等待LOCAL_QUORUM
个确认。这意味着写入第三个(慢)节点可能在确认后发生,或者如果无法传递则可以保存为提示。
答案 1 :(得分:2)
一致性级别不是要写入多少副本的反映,而是在协调cassandra节点可以将响应返回给客户端之前需要多少副本来确认写入。写入将最终在所有副本上完成,即使失败,也会有提示,读取修复和修复等机制,以使数据进入一致状态。
在读取时,如果需要强一致性,则应确保读取一致性和写入一致性的总和超出复制因子。
在您的情况下,复制因子为3,使用LOCAL_QUORUM进行读取和写入操作时,读取至少需要2个副本,写入需要2个副本,这大于复制因子(3)。
鉴于此,即使写入对其他副本失败,但成功的两个为您提供成功的写入响应,只要您读取的一致性级别需要2个或更多副本(即LOCAL_QUORUM),就可以确保你会得到正确的数据。
您可以在datastax docs about consistency:
中详细了解相关信息读写操作的可靠性取决于用于验证操作的一致性。当满足以下条件时,可以保证强一致性:
R + W> Ñ