【问题标题】:Cassandra java driver set global consistency levelCassandra java驱动设置全局一致性级别
【发布时间】:2018-07-12 06:22:34
【问题描述】:

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

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

我注意到这不是一个静态方法并返回一个 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 进行设置?

【问题讨论】:

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


    【解决方案1】:

    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 的一个实例,您需要再次构建它(我猜这不是您想要的)。

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

    【讨论】:

    • 谢谢。我只是通过调试器运行我的代码并验证简单地调用new QueryOptions().setConsistencyLevel(ConsistencyLevel.ALL) 不会设置全局一致性级别(我检查了我的 PreparedStatement 的一致性级别,它是null)。我猜你必须在构建集群对象时使用返回的 QueryOptions 对象。
    • 是关联新查询选项,您需要将其传递给 withQueryOptions 中的 builder 对象,该对象再次提供 Builder 实例。为了能够使用这个构建器实例,必须调用它的 .build() 方法。
    猜你喜欢
    • 2017-06-25
    • 2017-05-06
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多