我正在使用 cassandra 3.x 和 Node 10.13.0。我的工作内存中有 100,000 个用户的数据(在给定代码中的 map “sortedRowMap”中)。我通过迭代用户使用的 map (有 100,000 条记录)来更新所有记录。但它给我带来了 BusyConnectionError 。我想知道我怎样才能摆脱这个困境。
下面是上述描述的实现代码。
var cassClient = new cassandra.Client({contactPoints: ['localhost'],pooling: {
coreConnectionsPerHost: {
[distance.local] : 2,
[distance.remote] : 1
},
}, keyspace: 'xyz',
socketOptions: { readTimeout: 65000 }
});
rank = 0;
for (const [msisdn, totalearnings] of sortedRowMap) {
let updateRankQuery = "UPDATE users SET weeklyrank = " + rank + " WHERE
msisdn = " + msisdn;
cassClient.execute(updateRankQuery, function (error, result) {
if(!error){
rank++;
console.log("updateQuery: " + updateRankQuery)
}else{
console.log("ERROR: " + error)
}
})
}
它向我抛出了这个错误:
错误:NoHostAvailableError:尝试查询的所有主机均失败。第一个尝试的主机,127.0.0.1:9042: BusyConnectionError: 到主机 127.0.0.1:9042 的所有连接都忙,每个连接上有 2048 个请求正在进行。请参阅内部错误。
最佳答案
您需要增加每个连接的正在进行的请求数。协议(protocol)版本 3+ 支持最多 32k 正在进行的请求。您需要将相应的选项( maxRequestsPerConnection )添加到 pooling
对象中,如下所示:
pooling: {
coreConnectionsPerHost: {
[distance.local] : 2,
[distance.remote] : 1
},
maxRequestsPerConnection: 32768
}
但是,如果您的所有请求都访问相同的 Node ,您仍然可能会遇到此异常。在这种情况下,您需要限制您的提交,或重试
关于node.js - 使用nodejs对cassandra表上100,000个用户的记录应用更新查询。连接繁忙问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54301968/