为 Cassandra DDL 设置一致性级别
SET consistency level for Cassandra DDL
在我的应用程序日志中,我已经看到,默认情况下,在 运行 create/alter table 语句之后,cassandra 驱动程序似乎进行处理以使模式达成协议,最多10 秒。
我可以(并且应该)在执行 'Create Table .. IF NOT EXISTS' 等 DDL 语句时设置一致性级别,例如 'quorum' 以确保我的 table 被创建并传播到所有节点吗?
更改一致性级别不会影响集群达成一致所需的时间。如果这在您的集群上花费了 10 秒,您的客户端可能只是达到了默认超时,而不是完全等待所有节点达成一致。查看 Java Driver docs 以获取有关此过程的更多信息。
在您的应用程序之外,您可以使用 nodetool describecluster
检查模式状态。这将向您显示特定节点是否不接受对架构的更改。这里有一些 more information 从 Operator 的角度解决模式分歧。
自 1.1+ 以来,Cassandra 中的架构更改(数据定义)是通过 gossip 完成的。由于它使用 Gossip,因此它是一个不同于典型数据操作请求(SELECT、DELETE、INSERT 等)的单独 read/write 路径,因此对于此类操作没有可调一致性,因为 gossip 不以可调的一致性操作。从我链接的文章中,您可以看到模式更改是 被动地 在集群中宣布的,此外,当您有在模式时无法访问的节点时,您可以获得模式 disagreement/resolution已更改。
您多久修改一次架构?如您所见,架构更改虽然比以前有了很大改进,但仍然是一项非常昂贵的操作,因为 每个节点 都必须保持一致。出于这个原因,应该避免在 Cassandra 中频繁更改模式(也称为动态列)。我很想知道架构更改的频率和原因,也许您可以进行改造以避免动态 columns/tables 以避免 Cassandra 中昂贵的架构更改。
在我的应用程序日志中,我已经看到,默认情况下,在 运行 create/alter table 语句之后,cassandra 驱动程序似乎进行处理以使模式达成协议,最多10 秒。
我可以(并且应该)在执行 'Create Table .. IF NOT EXISTS' 等 DDL 语句时设置一致性级别,例如 'quorum' 以确保我的 table 被创建并传播到所有节点吗?
更改一致性级别不会影响集群达成一致所需的时间。如果这在您的集群上花费了 10 秒,您的客户端可能只是达到了默认超时,而不是完全等待所有节点达成一致。查看 Java Driver docs 以获取有关此过程的更多信息。
在您的应用程序之外,您可以使用 nodetool describecluster
检查模式状态。这将向您显示特定节点是否不接受对架构的更改。这里有一些 more information 从 Operator 的角度解决模式分歧。
自 1.1+ 以来,Cassandra 中的架构更改(数据定义)是通过 gossip 完成的。由于它使用 Gossip,因此它是一个不同于典型数据操作请求(SELECT、DELETE、INSERT 等)的单独 read/write 路径,因此对于此类操作没有可调一致性,因为 gossip 不以可调的一致性操作。从我链接的文章中,您可以看到模式更改是 被动地 在集群中宣布的,此外,当您有在模式时无法访问的节点时,您可以获得模式 disagreement/resolution已更改。
您多久修改一次架构?如您所见,架构更改虽然比以前有了很大改进,但仍然是一项非常昂贵的操作,因为 每个节点 都必须保持一致。出于这个原因,应该避免在 Cassandra 中频繁更改模式(也称为动态列)。我很想知道架构更改的频率和原因,也许您可以进行改造以避免动态 columns/tables 以避免 Cassandra 中昂贵的架构更改。