我想对BatchStatement执行做一些澄清 .
我已经为不同的表添加了许多插入/更新语句到批处理中 . 当我执行批处理时,我希望,如果任何一个查询失败,所有其他插入/更新都不应该成功 . 但它没有发生 . 我可以看到部分更新/插入 .
我怎样才能做到这一点? [如果任何一个查询失败,则不应发生批处理的所有更新/插入 . ]
如何获取/打印导致批量执行失败的确切问题查询?
LOGGED批处理语句的目的是什么?
http://www.datastax.com/drivers/java/2.0/com/datastax/driver/core/BatchStatement.Type.html#LOGGED
在BatchStatement中启用跟踪的目的是什么?如何打印跟踪以调试查询问题?
http://www.datastax.com/drivers/java/2.0/com/datastax/driver/core/Statement.html#enableTracing%28%29
我的代码看起来像,
BatchStatement batch = new BatchStatement();
batch.add(ps1.bind(xxx));
batch.add(ps2.bind(xxx));
batch.add(ps3.bind(xxx));
session.execute(batch);
谢谢,
拉梅什
1 回答
在这里阅读关于原子批次如何在Cassandra中工作的答案:
Atomic Batches in Cassandra
已记录的批次将启用原子批次 . 这意味着他们去了同一个协调员 .
您可以为任何查询启用跟踪CAssandra 1.2,而不仅仅是批处理 . 每个查询都有一个与之关联的UUID . 您可以使用该UUID来获取跟踪日志 .
见例子:http://www.datastax.com/doc-source/developer/java-driver/tracing_t.html