卡桑德拉的原子批次

时间:2014-03-26 14:30:01

标签: cassandra batch-processing datastax-java-driver cassandra-2.0

批处理语句在cassandra中是什么意思?文件在性质上有点令人困惑,准确无误。这是否意味着查询在群集中的节点之间是原子的?

比如说,我有一个包含100个查询的批处理。如果批处理中的第40个查询失败,那么批处理中执行的39个查询会发生什么?

我知道在引擎盖下创建了一个批处理日志,它将处理部分批处理的一致性。它是否删除了39个条目中的其余条目并提供批处理查询所需的原子性质。

在MYSQL中,我们将autocommit设置为false,因此我们可以回滚。那些情况下cassandra会回滚吗?

4 个答案:

答案 0 :(得分:3)

原子性是基于协调者的。这意味着当您进行原子批量突变时,它将转到一个协调员。如果批量中的一个突变(在您的示例中为40)因为负责它的副本已经失效而失败,协调器将为该副本写一个提示,并在它备份的死节点时提供它。

然而,有一种情况是你最终会有一半的应用突变:如果协调员本身有问题。

要了解有关原子批次的更多信息,请阅读以下内容: http://www.datastax.com/dev/blog/atomic-batches-in-cassandra-1-2

答案 1 :(得分:3)

它们实际上称为Logged批次而非Atomic批次。您获得的不仅仅是提示(您可以为任何写入获得),您还可以在协调器开始执行写操作之前将批处理复制到其他2个节点。

我刚才写了一篇博客:http://christopher-batey.blogspot.co.uk/2015/03/cassandra-anti-pattern-cassandra-logged.html

针对您的具体问题"它是否删除了39个条目中的其余条目并提供了批量查询所需的原子性质"

不 - 卡萨桑德没有回滚的概念。批处理日志副本将继续重试查询,直到它们都成功。

答案 2 :(得分:1)

最终一致是C *中的主要思想,他们以同样的方式设计批处理。与SQL世界中的事务不同,批量重播'发生故障时,而不是回滚。

这种设计差异是合理的,因为在C *中,加法比删除便宜。

需要注意的一件事是C *中不允许隔离。也就是说,其他客户端仍可能会读取部分更新的值。

C *中批量的功能讨论页面 https://issues.apache.org/jira/browse/CASSANDRA-4285

答案 3 :(得分:0)

原子批次应该像全有或全无。我不认为它应该只重播部分日志,因为它不适用于原子批量定义。

-Vivek