Cassandra WRITE = ALL,READ = ONE适用性

时间:2019-02-06 07:36:24

标签: cassandra replication availability

鉴于我们有一个2x5节点设置(跨2个DC),复制因子为3,而我们异步创建视图(以便我们可以安全地重试失败的操作)的事实在使用WRITE = ALL和READ = ONE有意义吗?

如果一个副本发生故障,我们如何知道恢复时间,以及如何获取正确的重试间隔和超时时间?

2 个答案:

答案 0 :(得分:0)

以下任何组合都应为您提供正确的数据:

  1. WRITE =所有读取=一个
  2. WRITE =一次读取=全部
  3. WRITE = LOCAL_QUORUM READ = LOCAL_QUORUM

您可以根据应用程序的负载调整应用程序中的一致性级别。

根据我的说法,第3条LOCAL_QUORUM应该会更好地工作,因为有时某个节点可能处于高负载状态,或者可能处于关闭状态。您的应用程序不会受到影响。

以防万一,您的写操作多于READ; WRITE CL = ALL 会使您的应用程序运行缓慢。

答案 1 :(得分:0)

从一致性的角度来看,WRITE = ALL和READ = ONE的组合是正确的-在写入所有副本之后,您确实可以从任何一个副本中读取并期待最新的数据。但是,这对高可用性是不利的-如果两个DC中的6个副本中的任何一个都已关闭,则写操作将无法完成。如果其中一个节点关闭了一个小时,那么一个小时内您将无法执行任何写操作。在某些批处理设置中,这可能是有道理的,但对于交互式工作负载来说,这通常是不可接受的,而交互式工作负载是主要关注的问题。

如果您真的不关心高可用性,只想在所有节点都启动时进行写入,那么我想WRITE = ALL可以工作。例如,您可以使用“ nodetool”判断所有节点何时启动。或者只是定期重试写入。