Cassandra连接最佳实践

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

  1. 为所有模块保持一个连接
  2. 为每个模块设置一个连接,或者如果最好的话;
  3. 每次有请求连接到Cassandra。

这个Web应用程序使用Cassandra来处理大部分请求。

我build议您使用Cassandra的DataStax Node.js驱动程序 ,它具有连接池和透明故障转移function,您只需执行查询,然后为您处理其余的问题。

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); }); 

免责声明:我是该项目的积极开发者

我会连接并回收它们,而不是使用您列出的选项之一。 这样你就不需要销毁已经build立的连接。 我唯一感到厌倦的是拥有一个太大的游泳池,所以确保你设定一个合理的门槛。

像这样的东西:

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

select游泳池而不是硬编码的理由:

  1. 为所有模块保持一个连接 – 这将是一个瓶颈,除非你正在运行一个单线程的应用程序,你不是
  2. 为每个模块设置一个连接 – 您需要为我们提供更多的上下文。 根据每个模块的线程,这可能是一个好方法。
  3. 连接到Cassandra每次我有一个请求 – build立连接并不便宜(代码如下),所以不要丢弃它们!

 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毫秒