Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Cassandra在没有Thread.sleep的情况下引发WriteTimeout异常_Java_Cassandra - Fatal编程技术网

Java Cassandra在没有Thread.sleep的情况下引发WriteTimeout异常

Java Cassandra在没有Thread.sleep的情况下引发WriteTimeout异常,java,cassandra,Java,Cassandra,我有一个批量工作,写了大约30万行到卡桑德拉。我把它们分成小批量,每批50行 下面是伪代码 @Override public void executeQuery(List<BatchStatement> batches) { List<ResultSetFuture> futures = List.of(); for (BatchStatement batch: batches) { futures.add(session.executeA

我有一个批量工作,写了大约30万行到卡桑德拉。我把它们分成小批量,每批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);
        }
        */

    }
}
@覆盖
public void executeQuery(列出批){
List futures=List.of();
for(批处理语句批处理:批处理){
futures.add(session.executeAsync(批处理));
}
for(结果未来rsf:未来){
rsf.getunterruptibly();
/*我必须添加以下代码以避免WriteTimeoutException
试一试{
睡眠(100);
}捕捉(中断异常e){
logger.error(“Thread.sleep”,e);
}
*/
}
}

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

通过对数据(很可能属于不同的分区)使用批处理语句,您的系统确实超载,因为协调节点需要向其他节点发送请求并等待响应。您只需要在特定用例中使用批处理,而不是像在关系数据库中使用批处理一样,来加速执行。这说明了批处理的不当使用

为每条线路发送单独的异步请求将改善这种情况,但您需要注意不要同时发送太多请求(通过使用信号量),并通过增加每个连接的飞行中请求数