使用cassandra datastax java驱动程序时,何时可以在同一群集下使用多个会话?我无法找到任何有用集群和多个会话的好用例。 我的应用程序有多个访问Cassandra的组件/模块。基于答案,我可能会决定每个组件/模块应该有一个会话,还是只在我的应用程序的所有组件中共享一个会话。
更新:互联网上的任何地方都建议您使用一个会话。我明白了,但我的问题是"你在什么情况下为一个集群创建多个会话?"。如果没有这样的场景,为什么库允许创建多个会话,而库只能有一个方法来返回单个会话对象。
答案 0 :(得分:1)
在所有组件中使用一个会话。
因为在Cassandra Session中是一个沉重的对象。线程安全的。它保持多个连接,缓存准备语句等。
这是JavaDoc:
会话保存与Cassandra集群的连接,允许查询它。每个会话都维护与群集节点的多个连接,提供策略以选择每个查询使用哪个节点(默认情况下在群集的所有节点上循环),并处理失败查询的重试(如果有意义),等等。 ..
会话实例是线程安全的,通常每个应用程序的单个实例就足够了。由于给定的会话一次只能“记录”到一个键空间中(如果查询没有明确地使用完全限定的表名,则“已记录的”键空间是查询使用的键空间),创建它是有意义的每个密钥空间使用一个会话。但是,查询多个键空间不是必需的,因为在查询中始终可以使用具有完全限定表名的单个会话。
资料来源:
https://docs.datastax.com/en/drivers/java/2.0/com/datastax/driver/core/Session.html
https://ahappyknockoutmouse.wordpress.com/2014/11/12/246/