我是Cassandra
的新手,我想问你一件事。我有一些事件,并且在每个事件上,应用程序都会响应一些与此类似的代码:
Cluster cluster = Cluster.builder().addContactPoint(CONTACT_POINT).build();;
Session session = cluster.connect(KEYSPACE);
Statement statement = QueryBuilder.update(KEYSPACE, TABLE_NAME)
.with(set(STATE_COLUMN, status.toString()))
.and(set(PERCENT_DONE_COLUMN, percentDone))
.where(eq(FILE_ID_COLUMN, id));
//or whatever query I might have
session.execute(statement);
cluster.close();
我的问题是:
每次调用cluster.connect()
和cluster.close()
是否更好,或者只是在应用程序启动时调用cluster.connect()
一次?
由于
答案 0 :(得分:3)
Cassandra中的连接旨在持久化,因此不应为每个CQL语句打开和关闭它们。设置连接有点昂贵,因为它创建了线程池并从集群中获取了大量元数据。
您希望在应用程序启动时设置一次连接,并在应用程序关闭时关闭它。如果您的应用程序中有多个线程,通常希望它们共享一个连接。
答案 1 :(得分:2)
您需要尽可能少地连接和关闭。
http://docs.datastax.com/en/developer/java-driver/2.1/java-driver/fourSimpleRules.html
当会话实例以查询执行为中心时, Session它还管理每个节点的连接池。会议 instance是一个长期存在的对象,它不应该用在 请求 - 响应,短命时尚。代码应该共享相同的内容 整个应用程序中的集群和会话实例。