使用 CQL3,Cassandra 一致性级别现在设置在会话级别。本机 Java 客户端的 Datastax 文档指出:
会话实例是线程安全的,通常每个应用程序只需要一个实例
但我很难看到单个 Session 实例如何处理多个一致性级别(例如使用 QUORUM 写入并使用 ONE 读取)。我到处都看到了潜在的比赛条件。
一个明显的解决方案是为读取和写入创建单独的会话,每个会话都设置了适当的一致性级别。但这并不能完全解决问题。如果一个班级修改了两个会话之一的一致性级别怎么办?然后,会话实例的所有后续用户将在不知不觉中使用新的 CL。
因此,据我所知,最安全的选择是每次需要访问 Cassandra 时创建一个新的 Session 实例,并在创建时明确设置 CL。
我不清楚的是这种方法是否会导致性能损失。例如,是否会session = cluster.connect()
或session.execute("CONSISTENCY [cl]")
涉及到服务器的旅行?
我在这里错过了什么吗?有没有人有相关经验可以分享?谢谢。
更新:我看到com.datastax.driver.core.Query
有一种设置一致性级别的方法。因此,也许最简单的选择是坚持使用单个 Session 实例并为每个查询设置 CL。