gpt4 book ai didi

java - Cassandra 在没有 Thread.sleep 的情况下抛出 WriteTimeout 异常

转载 作者:行者123 更新时间:2023-11-30 01:56:46 25 4
gpt4 key购买 nike

我有一个批处理作业,将大约 300,000 行写入 cassandra。我将它们分成较小的批处理,每批大小为 50 行。

伪代码如下。

@Override
public void executeQuery(List<BatchStatement> batches) {
List<ResultSetFuture> futures = List.of();
for (BatchStatement batch: batches) {
futures.add(session.executeAsync(batch));
}

for(ResultSetFuture rsf: futures) {
rsf.getUninterruptibly();
/* I have to add the following code to avoid WriteTimeoutException
try {
Thread.sleep(100);
} catch (InterruptedException e) {
logger.error("Thread.sleep", e);
}
*/

}
}

我不知道为什么没有Thread.sleep,它总是给出WriteTimeout Exception。如何避免这种情况?

最佳答案

通过对数据(很可能属于不同分区)使用批处理语句,您的系统确实会重载,因为协调节点需要向其他节点发送请求并等待答复。您只需要针对特定​​用例使用批处理,而不是像在关系数据库中使用批处理一样 - 以加快执行速度。这个documentation描述了批处理的错误使用。

为每一行发送单独的异步请求会改善情况,但您需要注意不要同时发送太多请求(通过使用信号量),并增加每行的正在进行的请求数量通过 pooling options 连接。

关于java - Cassandra 在没有 Thread.sleep 的情况下抛出 WriteTimeout 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54190817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com