gpt4 book ai didi

java - Cassandra bach查询一致性

转载 作者:行者123 更新时间:2023-12-02 02:57:08 25 4
gpt4 key购买 nike

我正在使用 Cassandra Java 驱动程序

我有一个用例,其中我将数据批量插入到具有不同分区键的各种 Cassandra 表中。

    BatchStatement batch = new BatchStatement();
batch.add (query1, query2, .....)
session.executeAsync(batch);

假设我的批处理语句中有 20 个查询,其中 15 个查询执行良好,5 个查询失败。

我如何知道哪些查询失败以及哪些查询已执行。

出于性能方面的考虑,我使用了executeAsync

<编辑1:>

我们正在使用“未记录的批量查询”。

最佳答案

记录的多分区批处理是原子的,但会降低性能。来自 Cassandra 官方文档:

Batches are atomic by default. In the context of a Cassandra batch operation, atomic means that if any of the batch succeeds, all of it will.

因此任何查询都会成功,否则没有人成功。

未记录的多分区批处理不是原子的。最好异步运行每个查询,然后单独收集结果,或者通过相同的分区键收集它们并在记录的批处理中运行它们。

例如:

    List<String> queries = new ArrayList<>();

List<ResultSetFuture> results = queries.stream()
.map(query -> session.executeAsync(query))
.collect(Collectors.toList());

results.stream()
.map(result -> {
try {
return Optional.ofNullable(result.getUninterruptibly());
} catch (Exception ex) {
// do smth
return Optional.empty();
}
})
.forEach(//do Something);

同时开启java客户端连接池,这样每次查询就不会建立新的连接http://docs.datastax.com/en/developer/java-driver/2.1/manual/pooling/

关于java - Cassandra bach查询一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42899273/

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