cassandra write=all,read=one

rmbxnbpk  于 2021-06-10  发布在  Cassandra
关注(0)|答案(2)|浏览(363)

假设我们有一个2x5节点的设置(跨2个dc)和3的复制因子,并且我们异步创建视图(这样我们就可以安全地重试失败的操作),那么使用write=all和read=one有意义吗?
如果一个副本失败,我们如何知道恢复时间,以便如何选择正确的重试间隔和超时?

chhkpiq4

chhkpiq41#

以下任何组合都应为您提供正确的数据:
写入=全部读取=一
写入=一次读取=全部
写入=本地\u仲裁读取=本地\u仲裁
您可以根据应用程序的负载调整应用程序中的一致性级别。
根据我的说法,第3个本地仲裁应该工作得更好,因为有时节点可能处于高负载下,或者可能已关闭。您的应用程序不会受到影响。
万一,你写的比读的多;write cl=all将使您的应用程序变慢。

kwvwclae

kwvwclae2#

write=all和read=one的组合在一致性的意义上是正确的—在您写入所有副本之后,您确实可以从任何一个副本中读取并期望得到最新的数据。但是,这不利于高可用性—如果两个DC中的6个副本中的任何一个都关闭,则无法完成写入。如果其中一个节点停机一小时,则一小时内无法执行任何写入操作。在某些批处理设置中,这可能是有意义的,但对于交互工作负载来说,这通常是不可接受的行为,在交互工作负载中,高可用性是一个主要问题。
如果您真的不关心高可用性,只想在所有节点都启动时进行写入,那么我猜write=all就可以工作了。例如,您可以使用“nodetool”判断所有节点何时启动。或者只是定期重试写操作。

相关问题