使用 CQL3,Cassandra 一致性级别现在设置在会话级别。本机 Java 客户端的 Datastax 文档指出:
会话实例是线程安全的,通常每个应用程序只需要一个实例
但我很难理解单个 Session 实例如何处理多个一致性级别(例如使用 QUORUM 写入并使用 ONE 读取)。我到处都看到了潜在的竞争条件。
一个明显的解决方案是为读取和写入创建单独的会话,每个会话都设置适当的一致性级别。但这并不能完全解决问题。如果一个班级修改了两个会话之一的一致性级别怎么办?然后,会话实例的所有后续用户都会在不知不觉中使用新的 CL。
因此,据我所知,最安全的选择是每次需要访问 Cassandra 时创建一个新的 Session 实例,并在创建时显式设置 CL。
我不清楚这种方法是否会带来性能损失。例如,将session = cluster.connect()
or session.execute("CONSISTENCY [cl]")
涉及到服务器?
我在这里错过了什么吗?有没有人有相关经验可以分享?谢谢。
更新:
我懂了com.datastax.driver.core.Query
有一个设置一致性级别的方法。因此,也许最简单的选择是坚持使用单个 Session 实例并为每个查询设置 CL。
因此,也许最简单的选择是坚持使用单个 Session 实例并为每个查询设置 CL。
这不仅是最简单的选择,而且the option.
在驱动程序 1.0.2 版本中,无法在每个查询的其他任何地方设置一致性级别。没有每个会话 CL。从Java驱动2.0版本开始,可以通过以下方式为Cluster设置全局默认一致性级别:Cluster.Builder.withQueryOptions() method http://www.datastax.com/drivers/java/2.0/com/datastax/driver/core/Cluster.Builder.html#withQueryOptions%28com.datastax.driver.core.QueryOptions%29.
不过,就其价值而言,我个人认为 CL 是每个查询的重要参数。因此,我不会觉得为每个查询设置它是疯狂的,即使为了文档的缘故而保留默认值 ONE(即说“我确实考虑过该查询的相关 CL 是什么,它是 ONE”)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)