Cassandra - 如何管理会话

时间:2015-09-24 12:19:53

标签: cassandra

我是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()一次?

由于

2 个答案:

答案 0 :(得分:3)

Cassandra中的连接旨在持久化,因此不应为每个CQL语句打开和关闭它们。设置连接有点昂贵,因为它创建了线程池并从集群中获取了大量元数据。

您希望在应用程序启动时设置一次连接,并在应用程序关闭时关闭它。如果您的应用程序中有多个线程,通常希望它们共享一个连接。

答案 1 :(得分:2)

您需要尽可能少地连接和关闭。

http://docs.datastax.com/en/developer/java-driver/2.1/java-driver/fourSimpleRules.html

  

当会话实例以查询执行为中心时,   Session它还管理每个节点的连接池。会议   instance是一个长期存在的对象,它不应该用在   请求 - 响应,短命时尚。代码应该共享相同的内容   整个应用程序中的集群和会话实例。