[英]Cassandra failure during write query at consistency LOCAL_QUORUM
[英]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.