繁体   English   中英

Cassandra bach查询一致性

[英]Cassandra bach query consistency

我正在使用Cassandra Java驱动程序

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

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

考虑我的批处理语句中有20个查询,有15个查询执行得很好,有5个查询失败。

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

由于性能方面的原因,我正在使用executeAsync

< 编辑1: >

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

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

默认情况下,批次是原子的。 在Cassandra批处理操作的上下文中,atomic表示如果任何批处理成功,则所有操作都会成功。

因此,任何查询都会成功或没有成功。

未记录的多分区批次不是原子的。 更好地异步运行每个查询,然后分别收集结果,或通过相同的分区键收集结果,然后以记录的批处理方式运行它们。

例如:

    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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM