2015-09-24 6 views
2

Я новичок в 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() один раз при запуске приложения?

Thanks

ответ

2

Вам необходимо подключиться и закрыть как можно меньше.

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

Хотя экземпляр сеанса вокруг выполнения запроса, Session также управляет пулов соединений по узлам. Сессия экземпляр является долгоживущим объектом и не должен использоваться в короткометражном режиме запроса-ответа . Код должен совместно использовать те же кластеры и сеансы связи в вашем приложении.

2

Соединения в Кассандре предназначены для постоянного, поэтому их не следует открывать и закрывать для каждой инструкции CQL. Настройка соединения несколько дорогая, поскольку она создает пулы потоков и получает много метаданных из кластера.

Вы хотите настроить соединение один раз при запуске приложения и закрыть его, когда приложение закрывается. Если в приложении есть несколько потоков, вы обычно хотите, чтобы все они имели одно соединение.

Смежные вопросы