Cassandra java 驱动程序设置全局一致性级别

Cassandra java driver set global consistency level

所以在datastax doc中声明ConsistencyLevel可以通过QueryOptions全局设置:

QueryOptions qo = new QueryOptions().setConsistencyLevel(ConsistencyLevel.ALL);

我注意到这不是静态方法,returns 是 QueryOptions 的一个实例。这是否意味着简单地调用此方法不会在全局范围内设置默认的一致性级别,并且我需要在连接到 Cassandra 集群时使用 QueryOptions?我的意思是,是否需要以下代码(在构建 Cluster 对象时设置 QueryOption

cluster = Cluster.builder().addContactPoint("192.168.0.30")
.withQueryOptions(new QueryOptions()
.setConsistencyLevel(ConsistencyLevel.ONE)
.withRetryPolicy(DefaultRetryPolicy.INSTANCE)
.withLoadBalancingPolicy(new TokenAwarePolicy(new DCAwareRoundRobinPolicy()))
.build();
session = cluster.connect("demo");

我的问题是我无权访问构建集群实例的代码。这是否意味着我无法设置全局一致性级别并且必须依赖于根据 Statement 进行设置?

Dataxdriver 表示您可以通过 QueryOptions 设置全局值,对于特定的查询一致性级别,您可以为每个语句定义。如果您无权访问集群构建代码,则可以使用 getConsistencyLevel 方法检查一致性级别的值。 如果这是您要为大多数语句设置的那个,那么您的工作会更容易。否则,您将需要根据语句定义它。

请看Best practice for managing different consistency levels using the Datastax Cassandra native java client

它描述了为什么每个语句具有一致性级别比具有全局值更好。

回答您

的问题

"I noticed that this is not a static method and returns an instance of QueryOptions. Does that mean simply calling this method won't set the default consistency level globally and I need to use the QueryOptions when connecting to the Cassandra cluster? I mean, is the following code required (to set the QueryOption when building the Cluster object)"

即使您没有按照 documentation 在集群构建器对象上调用 withQueryOptions,它也会使用默认查询选项创建实例。

检查 DefaultConstructor of QueryOptions 构造函数创建了一个具有一致性级别和其他参数默认值的查询选项。

同样根据 Cluster builder doc ,withQueryOptions 也是 returns Cluster.Builder 的一个实例,你需要重新构建它(我猜这不是你想要的)。

所以总结是:设置全局一致性级别的唯一方法是在创建集群构建器对象时。在您无法访问构建它的代码的情况下,您将不得不为每个语句设置值,或者最终可以构建新的值(免责声明:不应该完成!!)并使用它。