1

我想澄清一下 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);

谢谢,

拉梅什

4

1 回答 1

1

在此处阅读我关于原子批处理如何在 Cassandra 中工作的答案:

Cassandra 中的原子批处理

记录的批处理将启用原子批处理。这意味着他们去找同一个协调员。

您可以为任何查询启用 CAssandra 1.2 后的跟踪,而不仅仅是批处理。每个查询都有一个与之关联的 UUID。您可以使用该 UUID 来获取跟踪日志。

参见示例: http ://www.datastax.com/doc-source/developer/java-driver/tracing_t.html

于 2014-03-26T22:20:33.867 回答