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

使用Datastax Cassandra本机java客户端管理不同一致性级别的最佳实践,java,cassandra,client,Java,Cassandra,Client,使用CQL3,Cassandra一致性级别现在设置为会话级别。本机Java客户端的Datastax文档说明: 会话实例是线程安全的,通常每个应用程序只需要一个实例 但我很难理解单个会话实例如何处理多个一致性级别(例如,使用QUORUM进行写入,使用QUORUM进行读取)。我看到到处都有潜在的比赛条件 一个显而易见的解决方案是为读取和写入创建单独的会话,每个会话都设置了适当的一致性级别。但这并不能完全解决问题。如果一个类修改了这两个会话之一的一致性级别,该怎么办?然后,会话实例的所有后续用户将在不

使用CQL3,Cassandra一致性级别现在设置为会话级别。本机Java客户端的Datastax文档说明:

会话实例是线程安全的,通常每个应用程序只需要一个实例

但我很难理解单个会话实例如何处理多个一致性级别(例如,使用QUORUM进行写入,使用QUORUM进行读取)。我看到到处都有潜在的比赛条件

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

因此,就我所见,最安全的选择是在每次需要访问Cassandra时创建一个新的会话实例,并在创建时显式设置CL

我不清楚的是,这种方法是否会导致性能损失。例如,
session=cluster.connect()
session.execute(“一致性[cl]”
是否涉及到服务器的访问

我是不是遗漏了什么?有没有人有相关的经验可以分享?谢谢

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

因此,也许最简单的选择是坚持使用单个会话实例,并为每个查询设置CL

这不仅是最简单的选择,也是最重要的选择

在驱动程序的1.0.2版本中,无法在任何其他地方设置每个查询的一致性级别。没有每会话CL。自Java驱动程序的版本2.0以来,可以通过为集群设置全局默认一致性级别


尽管如此,我个人认为CL是每个查询的一个重要参数。因此,我不会觉得为每个查询设置它很疯狂,即使是为了文档的缘故而保留一个默认值(即说“我确实知道这个查询的相关CL是什么,它是一个”)。

谢谢。我认为问题主要是文件问题。C*1.2()的文档与驱动程序无关,只讨论会话级别的一致性,而正如您所确认的,本机驱动程序使用每个查询的方法。此外,我发现的几个使用本机驱动程序的示例都使用了session.execute(query)-但无法设置CL。我不得不求助于:SimpleStatement语句=新SimpleStatement(cql);声明.设置一致性水平(cl);执行(语句);有没有办法分别设置默认的readConsistency和writeConsistencyLevel,而不是一个一致性级别?