首页 > 解决方案 > 使用 Cassandra 的 Java 驱动程序的多键空间

问题描述

目前,我们使用 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 连接,而无需对现有逻辑进行太多更改,除了配置。对此的任何建议或帮助将是一个很好的开始方式

标签: javacassandradatastax-enterprisedatastax-java-driver

解决方案


实现这一点的最佳方法是keyspace.table在所有查询中指定表,并且不要依赖会话中设置的键空间。您当然可以拥有多个会话对象 - 每个键空间一个,但不建议这样做,因为每个会话都非常重量级,并且至少打开 2 个到集群中每个节点的连接。

Java 驱动程序的最新版本支持通过classsetKeyspace的函数SimpleStatement设置键空间,但它也需要 Cassandra 端的支持(虽然不记得是哪个版本,但至少 DSE 6.0 支持这一点)。

(更新):查询级别的设置键空间没有合并到OSS Java驱动中,并且仅在DSE Java驱动中可用


推荐阅读