gpt4 book ai didi

java - (Datastax 4.1.0) (Cassandra)如何收集 session.executeAsync 的所有响应?

转载 作者:行者123 更新时间:2023-12-01 18:32:56 24 4
gpt4 key购买 nike

我想使用execute.Async调用对cassandra db进行异步调用在手册中我找到了这段代码,但我无法理解如何将所有行收集到任何列表中。非常基本的调用,例如 Select * from table,我想存储所有结果。

https://docs.datastax.com/en/developer/java-driver/4.4/manual/core/async/

CompletionStage<CqlSession> sessionStage = CqlSession.builder().buildAsync();

// Chain one async operation after another:
CompletionStage<AsyncResultSet> responseStage =
sessionStage.thenCompose(
session -> session.executeAsync("SELECT release_version FROM system.local"));

// Apply a synchronous computation:
CompletionStage<String> resultStage =
responseStage.thenApply(resultSet -> resultSet.one().getString("release_version"));

// Perform an action once a stage is complete:
resultStage.whenComplete(
(version, error) -> {
if (error != null) {
System.out.printf("Failed to retrieve the version: %s%n", error.getMessage());
} else {
System.out.printf("Server version: %s%n", version);
}
sessionStage.thenAccept(CqlSession::closeAsync);
});

最佳答案

您需要引用section about asynchronous paging - 您需要提供一个回调,将数据收集到作为外部对象提供的列表中。文档有以下示例:

CompletionStage<AsyncResultSet> futureRs =
session.executeAsync("SELECT * FROM myTable WHERE id = 1");
futureRs.whenComplete(this::processRows);

void processRows(AsyncResultSet rs, Throwable error) {
if (error != null) {
// The query failed, process the error
} else {
for (Row row : rs.currentPage()) {
// Process the row...
}
if (rs.hasMorePages()) {
rs.fetchNextPage().whenComplete(this::processRows);
}
}
}

在这种情况下,processRows 可以将数据存储在作为当前对象一部分的列表中,如下所示:

class Abc {
List<Row> rows = new ArrayList<>();

// call to executeAsync

void processRows(AsyncResultSet rs, Throwable error) {
....
for (Row row : rs.currentPage()) {
rows.add(row);
}
....

}
}

但是您需要非常小心 select * from table 因为它可能会返回很多结果,而且如果您有太多数据,它可能会超时 - 在这种情况下最好执行 token 范围扫描(我有 an example for driver 3.x ,但 4.x 还没有)。

关于java - (Datastax 4.1.0) (Cassandra)如何收集 session.executeAsync 的所有响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60126668/

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