gpt4 book ai didi

java - 使用 Datastax Cassandra native java 客户端管理不同一致性级别的最佳实践

转载 作者:搜寻专家 更新时间:2023-11-01 01:53:28 25 4
gpt4 key购买 nike

使用 CQL3,Cassandra 一致性级别现在设置在 session 级别。 native Java 客户端的 Datastax 文档指出:

Session instances are thread-safe and usually a single instance is all you need per application

但我很难看到单个 Session 实例如何处理多个一致性级别(例如使用 QUORUM 写入并使用 ONE 读取)。我到处都看到潜在的竞争条件。

一个明显的解决方案是为读取和写入创建单独的 session ,每个 session 都设置了适当的一致性级别。但这并不能完全解决问题。如果一个类(class)修改了两个类(class)之一的一致性级别怎么办? Session 实例的所有后续用户都会在不知不觉中使用新的 CL。

因此,据我所知,最安全的选择是在每次需要访问 Cassandra 时创建一个新的 Session 实例,并在创建时明确设置 CL。

我不清楚这种方法是否会导致性能下降。例如,session = cluster.connect()session.execute("CONSISTENCY [cl]") 是否涉及到服务器的访问?

我是不是漏掉了什么?有没有人有任何相关经验可以分享?谢谢。

更新:我看到 com.datastax.driver.core.Query 有一种设置一致性级别的方法。因此,也许最简单的选择是坚持使用单个 Session 实例并为每个查询设置 CL。

最佳答案

So perhaps the simplest option is stick with a single Session instance and set the CL for each query.

这不仅是最简单的选项,而且是选项。

在驱动程序的 1.0.2 版中,无法在每个查询的任何其他地方设置一致性级别。没有每 session CL。从 2.0 版本的 Java 驱动程序开始,可以通过 Cluster.Builder.withQueryOptions() method 为 Cluster 设置全局默认一致性级别。 .

不过,就值(value)而言,我个人认为 CL 是每个查询的重要参数。所以我不会觉得为每个查询设置它是疯狂的,即使它为了文档的缘故而保留默认值 ONE(即说“我确实知道这个查询的相关 CL 是什么,它是 ONE”)。

关于java - 使用 Datastax Cassandra native java 客户端管理不同一致性级别的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18355139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com