【发布时间】:2015-11-04 08:49:13
【问题描述】:
我在 Cassandra 中遇到以下持续错误:
Cassandra- 尝试查询的所有主机都失败(尝试:xxxxxx(com.datastax.driver.core.exceptions.DriverException:尝试获取可用连接时超时)(您可能希望增加每主机连接))))
当我尝试将大型数据库加载到单个集群中时,会出现问题。到目前为止,我已经尝试了我发现的有关此问题的所有建议:
- 我只有一个集群和一个会话
- 我正在为插入使用准备好的语句
- 我慷慨地增加了双方的超时时间
我正在这里粘贴我用来加载的函数,遵循blog post 中的建议,也许有人能发现一些东西。更改 BATCH_SIZE 是唯一能以某种方式改善这种情况的因素。如果我将它设置为 1_000_000 它几乎会立即失败,如果我将它设置为 100_000 它会运行很长一段时间。在下面的代码中,pstatement 是 PreparedStatement,futures 是
列表
.
public boolean addPair(byte[] key, byte[] value) throws IOException {
if (futures.size() >= BATCH_SIZE) {
flush();
}
BoundStatement boundStatementInsert = new BoundStatement(pstatement);
futures
.add(session.executeAsync(boundStatementInsert.bind(ByteBuffer.wrap(key), ByteBuffer.wrap(value)).setConsistencyLevel(ConsistencyLevel.ALL)));
return true; }
private void flush() {
for (ResultSetFuture rsf : futures) {
rsf.getUninterruptibly();
}
futures.clear(); }
提前致谢
阿尔托伯
【问题讨论】:
标签: java cassandra key-value-store