Cassandra 连接最佳实践

Cassandra connections best practice

本文关键字:最佳 连接 Cassandra      更新时间:2023-09-26

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

  1. 为所有模块保持单一连接
  2. 为每个模块设置一个连接,或者如果最好是;
  3. 每次我有请求时都连接到卡桑德拉。

此 Web 应用程序将 Cassandra 用于大多数请求。

我建议您使用 Cassandra 的 DataStax Node.js 驱动程序,它具有连接池和透明故障转移功能,您只需要执行查询,它将为您处理其余的工作。

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

免责声明:我是该项目的活跃开发人员

我会

汇集连接并回收它们,而不是使用您列出的选项之一。这样,您就不需要销毁已创建的连接。我唯一会厌倦的是游泳池太大,所以请确保设置一个合理的阈值。

像这样:

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 - 建立连接并不便宜(下面的代码),所以不要丢弃它们!

.

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