Qua*_*ing 5 java cassandra datastax-java-driver datastax cassandra-2.0
所以在datastax doc 中,它指出 ConsistencyLevel 可以通过 QueryOptions 全局设置:
QueryOptions qo = new QueryOptions().setConsistencyLevel(ConsistencyLevel.ALL);
Run Code Online (Sandbox Code Playgroud)
我注意到这不是一个静态方法并返回一个 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");
Run Code Online (Sandbox Code Playgroud)
我的问题是我无权访问构建 Cluster 实例的代码。这是否意味着我无法设置全局一致性级别而必须依赖于设置 per Statement?
Dataxdriver 表示您可以通过 QueryOptions 设置全局值,并且对于特定查询的一致性级别,您可以为每个语句定义。如果您无权访问集群构建代码,则可以使用以下命令检查一致性级别的值getConsistencyLevel方法检查一致性级别的值。如果这是您想为大多数语句设置的,那么您的工作会更容易。否则,您将需要根据每个语句来定义它。
请查看使用 Datastax Cassandra 本机 java 客户端管理不同一致性级别的最佳实践
它描述了为什么每个语句具有一致性级别比具有全局值更好。
回答您的问题
“我注意到这不是静态方法并返回 QueryOptions 的实例。这是否意味着简单地调用此方法不会全局设置默认一致性级别,并且我需要在连接到 Cassandra 集群时使用 QueryOptions?我的意思是,需要以下代码(在构建 Cluster 对象时设置 QueryOption)”
即使您没有按照文档调用集群构建器对象上的 withQueryOptions集群构建器对象上的 withQueryOptions ,它也会使用默认查询选项创建实例。
检查QueryOptions 的 DefaultConstructor构造函数创建一个具有一致性级别默认值和其他参数的查询选项。
另根据集群构建器文档, withQueryOptions 还返回 Cluster.Builder 的实例,您将需要再次构建它(我猜这不是您想要的)。
所以总结是:设置全局一致性级别的唯一方法是在创建集群构建器对象时。在您的情况下,当您无权访问构建它的代码时,您必须为每个语句设置值,或者最终可能会构建新的值(免责声明:不应该这样做!!)并使用它。
| 归档时间: |
|
| 查看次数: |
3742 次 |
| 最近记录: |