当前,我们使用Cassandra的Java驱动程序根据属性文件中定义的属性来配置会话,如下所示:
Cluster cluster = Cluster.builder()
.addContactPoints(contactPoints)
.withPort(environment.getRequiredProperty("cassandra.port", Integer.class))
.withCredentials(username, password)
.build();
Session session = cluster.connect(environment.getRequiredProperty("cassandra.keyspace"));
我们现在想要实现的是在运行中使用多键空间(如果有一种方法),它能够检测给定请求的cassandra连接,而无需对现有逻辑(配置除外)进行太多更改。任何建议或帮助都将是一个不错的起点
最佳答案
实现此目的的最佳方法是在所有查询中将表均指定为keyspace.table
,并且不要依赖会话中设置的键空间。您当然可以有多个会话对象-每个键空间一个,但是不建议这样做,因为每个会话都非常繁重,并且至少要与集群中的每个节点建立2个连接。
Java驱动程序的最新版本支持通过setKeyspace
function of the SimpleStatement
class设置键空间,但是它也需要在Cassandra方面进行支持(尽管不记得哪个版本,至少DSE 6.0支持此功能)。
(更新):查询级别的设置键空间未合并到OSS Java驱动程序和available only in DSE Java driver中。