2015-01-26 2 views
4

Я использую Node JS с Cassandra, и мне интересно, как лучше всего взаимодействовать. У меня есть несколько модулей, которые взаимодействуют с Кассандрой, и я хочу знать, если это лучшеКассандра связи лучшая практика

  1. держать одно соединение для всех модулей
  2. установленных соединения для каждого модуля, или если лучше всего;
  3. подключитесь к Кассандре каждый раз, когда у меня есть запрос.

Это приложение использует Cassandra для большинства запросов.

ответ

2

Я бы рекомендовал вам использовать DataStax Node.js driver for Cassandra, он имеет пул соединений и прозрачный переход на другой ресурс, вам нужно только выполнить ваши запросы, и он будет обрабатывать остальное для вас.

var cassandra = require('cassandra-driver'); 
var client = new cassandra.Client({ 
    contactPoints: ['host1', 'host2'], 
    keyspace: 'ks1' 
}); 
var query = 'SELECT email, last_name FROM user_profiles WHERE key=?'; 
//the driver will handle connection pool and failover 
client.execute(query, ['guy'], function(err, result) { 
    assert.ifError(err); 
    console.log('User profile email ' + result.rows[0].email); 
}); 

Отказ от ответственности: Я активный разработчик проекта

+1

Я использую этот драйвер. Вы рекомендуете поддерживать одно соединение или одно соединение для каждого модуля? –

+1

Клиент представляет собой пул соединений с несколькими хостами, вы должны использовать один экземпляр клиента и повторно использовать его во всех своих модулях: http://www.datastax.com/documentation/developer/nodejs-driver/1.0/nodejs-driver /faq/njdFaq.html – jorgebg

2

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

Что-то вроде этого:

no connections are available in pool 
    create connection (add it back once finished using it) 
connections are available in pool 
    fetch connection from pool 

Причина выбора пула, а не закодированный номера:

  1. держать одно подключение для всех модулей - это будет узкое место, если вы не работаете однопоточное приложение, а вы не
  2. установить соединение для каждого модуля - вам нужно предоставить больше контекста. Это может быть хорошим подходом, основанным на том, как многопоточность каждого модуля.
  3. подключитесь к Кассандре каждый раз, когда у меня есть запрос - строительные соединения не дешевы (код ниже), поэтому не отбрасывайте их!

.

Cluster cluster = Cluster.builder().addContactPoints("localhost").build(); 
long start = System.currentTimeMillis(); 
Session session = cluster.connect(); 
System.out.println(String.format("Took %s ms", System.currentTimeMillis() - start)); 

Выход: 490 мс.

+0

Я использую Node.js. Разве это не приложение для нитей? –

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