使用 Cassandra 的 Java 驱动程序实现多键空间

Multi-Keyspace with Cassandra's Java Driver on fly

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

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

最新版本的Java驱动支持通过setKeyspace function of the SimpleStatement class设置键空间,但它也需要Cassandra端的支持(不记得是哪个版本了,至少DSE 6.0支持这个)。

(更新):查询级别的设置键空间未合并到 OSS Java 驱动程序中,并且 available only in DSE Java driver.