【发布时间】:2016-10-20 22:57:02
【问题描述】:
我编写了一个小应用程序来理解 cassandra 中的连接池概念。我正在使用 Apache bench 工具对其进行测试。但是,该应用程序有时会显示错误并关闭其间的连接。然后它会抛出错误,例如主机已关闭。当我请求 1,00,000 个并发 1000 的查询时。它成功执行,但是如果我尝试增加并发性,那么它最终会关闭套接字并最终显示主机已关闭。那么我的问题是 cassandra 可以服务的并发请求是否有限制? limit 是大约 32K 请求,无需等待响应,因为我使用的是 cassandra 3.0。
这是否意味着我可以运行那么多并发请求?
出现此错误的原因是什么?对于某些输入,而不是所有输入。
- 连接池在 cassandra 中是如何工作的 只设置每台主机的 coreConnections 数量而不是数量 每个连接的请求数?
这是我制作的测试文件。
var cassandra = require("cassandra-driver");
var express = require("express");
var distance = cassandra.types.distance;
var cassClient = new cassandra.Client({contactPoints: ['myhost'],pooling: {
coreConnectionsPerHost: {
[distance.local] : 2,
[distance.remote] : 1
}
}, keyspace: 'MY_DB'});
var app = express();
cassClient.connect(function( err ){
if( err ){
console.log("Error: Connection to cassandra server."+err);
} else {
console.log("Success !!!");
}
});
var i =0;
app.get("/",function(req,res){
cassClient.execute('SELECT * from mytable LIMIT 2', function(err, rows) {
//cassClient.shutdown();
if (!err){
// console.log('The solution is: ' +i);
return res.send();
}
else
{
i++;
console.log(err.message +" "+i);
return res.send();
}
});
// cassClient.nwd();
});
app.listen(3001);
我得到的错误是
- 尝试查询的所有主机均失败。第一个主机尝试,myhost:9042: 主机被认为是 DOWN。请参阅内部错误。
- 尝试查询的所有主机均失败。第一个主机尝试,myhost:9042: Error: Socket was closed。请参阅内部错误。
- 尝试查询的所有主机均失败。第一个主机尝试,myhost:9042: OperationTimedOutError: 主机 myhost:9042 在超时 12000 毫秒之前没有回复。请参阅内部错误。
那么为什么会这样呢?
【问题讨论】: