【问题标题】:SET consistency level for Cassandra DDL设置 Cassandra DDL 的一致性级别
【发布时间】:2017-05-06 00:59:04
【问题描述】:

在我的应用程序日志中,我看到,默认情况下,在运行 create/alter table 语句后,cassandra 驱动程序似乎会进行处理以使架构达成协议长达 10 秒。

在执行诸如“创建表..如果不存在”之类的 DDL 语句时,我是否可以(并且应该)设置一个一致性级别,例如“仲裁”,以确保我的表被创建并传播到所有节点?

【问题讨论】:

    标签: cassandra datastax spring-data-cassandra


    【解决方案1】:

    更改一致性级别不会影响集群达成一致所需的时间。如果这在您的集群上需要 10 秒,您的客户端可能只是达到默认超时,而不是完全等待所有节点达成一致。查看Java Driver docs 了解有关此过程的更多信息。

    在您的应用程序之外,您可以使用nodetool describecluster 检查架构状态。这将显示特定节点是否不接受对模式的更改。这里有一些 more information 从运营商的角度解决架构分歧。

    【讨论】:

      【解决方案2】:

      自 1.1+ 起 Cassandra 中的架构更改(数据定义)是通过 gossip 完成的。由于它使用 Gossip,它是一个与典型数据操作请求(SELECT、DELETE、INSERT 等)不同的读/写路径,因此对于此类操作没有可调一致性,因为 gossip 不以可调一致性运行。从我链接的文章中,您可以看到架构更改是在集群中被动宣布的,此外,当您有在进行架构更改时无法访问的节点时,您可以获得架构分歧/解决方案。

      您多久修改一次架构?正如您所看到的,架构更改虽然比以前有了很大改进,但仍然是一项非常昂贵的操作,因为每个节点必须保持一致。出于这个原因,应避免在 Cassandra 中频繁更改模式(也称为动态列)。我很想知道架构更改的频率和原因,也许您可​​以进行改造以避免动态列/表,以避免在 Cassandra 中进行昂贵的架构更改。

      【讨论】:

      • 谢谢@fromantor。我们不会经常修改我们的架构,我们会在推出新版本时修改架构的某个时候。在一次这样的情况下,我们在应用日志中看到了故障,并发现新表架构无法传播到所有 cassandra 节点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 2016-07-05
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      相关资源
      最近更新 更多