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

时间:2018-02-01 20:15:21

标签: java cassandra datastax cassandra-2.0 datastax-java-driver

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

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

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

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设置它?

1 个答案:

答案 0 :(得分:2)

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

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

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

回答你的问题

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

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

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

另外,根据Cluster builder doc,withQueryOptions也会返回一个Cluster.Builder的实例,你需要再次构建它(我想不是你想要的)。

所以摘要是:设置全局一致性级别的唯一方法是创建集群构建器对象。在您没有访问构建它的代码的情况下,您必须为每个语句设置值,或者最终建立新的(免责声明:不应该!!)并使用它。