使用 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.
目前,我们使用 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.