Cassandra 连接最佳实践
Cassandra connections best practice
我正在将 Node JS 与 Cassandra 一起使用,我想知道最好的交互方式是什么。我有多个与 Cassandra 交互的模块,我想知道
是否更好
- 为所有模块保持单一连接
- 为每个模块设置一个连接,或者最好是;
- 每次有请求时连接到 Cassandra。
此 Web 应用程序使用 Cassandra 处理大部分请求。
我会合并连接并回收它们,而不是使用您列出的选项之一。这样你就不需要破坏已经创建的连接。唯一让我感到厌倦的是游泳池太大,因此请确保设置一个合理的阈值。
像这样:
no connections are available in pool
create connection (add it back once finished using it)
connections are available in pool
fetch connection from pool
选择池而不是硬编码号码的原因:
- 为所有模块保持单一连接 - 这将是一个瓶颈,除非你是 运行 单线程应用程序而你不是
- 为每个模块设置连接 - 您需要为我们提供更多上下文。根据每个模块的线程化程度,这可能是一个很好的方法。
- 每次我有请求时都连接到 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 毫秒。
我建议您使用 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);
});
免责声明:我是该项目的活跃开发者
我正在将 Node JS 与 Cassandra 一起使用,我想知道最好的交互方式是什么。我有多个与 Cassandra 交互的模块,我想知道
是否更好- 为所有模块保持单一连接
- 为每个模块设置一个连接,或者最好是;
- 每次有请求时连接到 Cassandra。
此 Web 应用程序使用 Cassandra 处理大部分请求。
我会合并连接并回收它们,而不是使用您列出的选项之一。这样你就不需要破坏已经创建的连接。唯一让我感到厌倦的是游泳池太大,因此请确保设置一个合理的阈值。
像这样:
no connections are available in pool
create connection (add it back once finished using it)
connections are available in pool
fetch connection from pool
选择池而不是硬编码号码的原因:
- 为所有模块保持单一连接 - 这将是一个瓶颈,除非你是 运行 单线程应用程序而你不是
- 为每个模块设置连接 - 您需要为我们提供更多上下文。根据每个模块的线程化程度,这可能是一个很好的方法。
- 每次我有请求时都连接到 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 毫秒。
我建议您使用 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);
});
免责声明:我是该项目的活跃开发者