如果较低的一致性水平是好的那么为什么我们需要在Cassandra中具有更高的一致性(QUORUM,ALL)水平?

时间:2018-03-13 19:41:02

标签: cassandra

在阅读Datastax教程时,我了解到了这一点 1)较低的一致性级别对于读写更快,而如果我们使用更高的一致性级别则更长 2)较低的一致性级别也可确保数据的高可用性。

我的问题是 如果低CL是好的那么我们总是可以将CL设置为ONE, 为什么我们需要QUORUM和ALL一致性水平?

2 个答案:

答案 0 :(得分:2)

最终取决于使用Cassandra的应用程序。如果应用程序可以提供可能未被复制或稍微陈旧的数据,那么LOCAL_ONE应该没问题。如果应用程序绝对无法提供错误的答案,或者如果写入的行没有被一致地成功读取,那么LOCAL_QUORUM可能更适用。

我告诉我的应用团队同样的事情。从LOCAL_ONE开始,并通过测试进行处理。如果您没有任何问题,请继续使用它。如果您确实遇到陈旧数据,并且您的应用程序对读取更敏感,请尝试<{1}}上的撰写并继续阅读LOCAL_QUORUM。如果这没有帮助,那么应用程序可能需要LOCAL_ONE

同样,这也是应用团队需要进行全面测试的原因。

只是为了解决它,QUORUM.是一个有用的一致性级别,因为它调用了一个读修复。基本上,如果您有一个表,您知道该表缺少数据,并且您不想在其上运行成本高昂的ALL,则可以将您的一致性设置为nodetool repair并从中读取。在解决与ALL有问题的多DC集群的问题时,我发现此技巧最有用。

但您可能不想在应用程序中使用system_auth。或者,如果你这样做,那就是针对非常具体的边缘情况。

答案 1 :(得分:0)

像Cassandra这样的数据库的真正含义是“最终的一致性”:当您第一次将数据写入数据库时​​,它不会强制实现强一致性。相反,只要此规则“ Read_Consistency_level + Write_consistency_level&gt; = RF策略(复制),它就可以选择较弱的一致性级别(如”one“)以达到较高的写入性能,然后再查询数据时因素)“满足,你不会有过时的数据。

如果您无法满足上述规则,则存在风险,因为您可能会收到陈旧或矛盾(有时是新的,有时是旧的)数据。