Cassandra连接最佳实践

时间:2015-01-26 19:49:05

标签: javascript node.js cassandra database nosql

我在Cassandra中使用Node JS,我想知道最好的交互方式是什么。我有多个与Cassandra交互的模块,我想知道它是否更好

  1. 为所有模块保留单个连接
  2. 为每个模块设置连接,或者最好是;
  3. 每次收到请求时都会连接到Cassandra。
  4. 此Web应用程序使用Cassandra处理大多数请求。

2 个答案:

答案 0 :(得分: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. 每次有请求时连接到Cassandra - 建立连接并不便宜(下面的代码),所以不要丢弃它们!
  4. 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 ms

答案 1 :(得分: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);
});

免责声明:我是项目的活跃开发者