我正在开发一个多线程应用程序,其中每个线程都使用Java访问Cassandra。 我应该创建多个集群并在每次访问或多个会话后关闭它们吗? 我可以将群集或会话创建为静态数据成员吗?
这是我将两者声明为静态时得到的日志:
14:40:50.361 [cluster1-nio-worker-0] DEBUG com.datastax.driver.core.Connection - Connection[localhost/127.0.0.1:9042-1, inFlight=0, closed=false] was inactive for 30 seconds, sending heartbeat
14:40:50.361 [cluster1-nio-worker-0] DEBUG com.datastax.driver.core.Connection - Connection[localhost/127.0.0.1:9042-1, inFlight=0, closed=false] heartbeat query succeeded
答案 0 :(得分:3)
如果您正在编写多线程应用程序,我将创建群集和会话作为静态成员。会话为每个实例维护多个线程,并且线程安全。我会使用一个Session对象每个密钥空间。
来自cassandra-java-driver docs:
会话实例是线程安全的,通常是单个实例 足够的应用程序。由于给定的会话只能“登录” 一次一个键空间(“已记录”键空间是使用的键空间 查询查询是否明确使用完全限定的表 name),每个使用的键空间创建一个会话是有意义的。这个 但是,不需要查询多个键空间,因为它是 始终可以使用具有完全限定表的单个会话 查询中的名称。