java - 使用 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 连接,而无需对现有逻辑进行太多更改,除了配置。对此的任何建议或帮助将是一个很好的开始方式
解决方案
实现这一点的最佳方法是keyspace.table
在所有查询中指定表,并且不要依赖会话中设置的键空间。您当然可以拥有多个会话对象 - 每个键空间一个,但不建议这样做,因为每个会话都非常重量级,并且至少打开 2 个到集群中每个节点的连接。
Java 驱动程序的最新版本支持通过classsetKeyspace
的函数SimpleStatement
设置键空间,但它也需要 Cassandra 端的支持(虽然不记得是哪个版本,但至少 DSE 6.0 支持这一点)。
(更新):查询级别的设置键空间没有合并到OSS Java驱动中,并且仅在DSE Java驱动中可用。
推荐阅读
- perl - 我可以使用变量在 perl 中设置特定的命名空间吗
- postgresql - postgres 用于存储天数的数据类型(可能包括半天)
- c# - 将 100 万个对象列表与 c# 中的另外 100 万个对象列表进行比较的最佳方法
- php - 如何遍历 PHP 中的 JSON 输出并仅选择第二个键 => 值?
- java - 服务注释类在存储库调用上引发空指针异常
- excel - Excel时间公式
- powershell - 执行 powershell 命令后批处理文件暂停
- excel - 无法将工作表类型与范围类型组合
- azure - Microsoft Azure 云中的可用区和区域有什么区别?
- java - 在 Java-8 中捕获多个异常