Dav*_*ria 4 java client cassandra
使用CQL3,Cassandra一致性级别现在设置在会话级别.本机Java客户端的Datastax文档说明:
会话实例是线程安全的,通常每个应用程序只需要一个实例
但我很难看到单个Session实例如何处理多个一致性级别(例如使用QUORUM写入并使用ONE读取).我看到了各处潜在的竞争条件.
一个明显的解决方案是为读取和写入创建单独的会话,每个会话都具有适当的一致性级别集.但这并没有完全解决问题.如果一个类修改了两个会话之一的一致性级别怎么办?然后,Session实例的所有后续用户将在不知不觉中使用新CL.
因此,据我所知,最安全的选择是每次需要访问Cassandra时创建一个新的Session实例,并在创建时明确设置CL.
我不清楚的是这种方法是否会带来性能损失.例如,要么session = cluster.connect()或者session.execute("CONSISTENCY [cl]")涉及与服务器通信?
我在这里错过了什么吗?有没有人有相关经验可以分享?谢谢.
更新:我看到com.datastax.driver.core.Query有一种设置一致性级别的方法.因此,最简单的选择可能是坚持使用单个Session实例并为每个查询设置CL.
小智 7
因此,最简单的选择可能是坚持使用单个Session实例并为每个查询设置CL.
不仅是最简单的选择,它的选项.
在驱动程序的1.0.2版中,无法在每个查询的其他任何位置设置一致性级别.没有每会话CL.从Java驱动程序2.0版开始,可以通过该Cluster.Builder.withQueryOptions()方法为Cluster设置全局默认一致性级别.
虽然,值得一提的是,我个人认为CL是每个查询的重要参数.所以我不会觉得为每个查询设置它是疯狂的,即使为了文档而保持默认值为ONE(即说"我确实知道这个查询的相关CL是什么,它是一个").