批处理语句在cassandra中是什么意思?文件在性质上有点令人困惑,准确无误。这是否意味着查询在群集中的节点之间是原子的?
比如说,我有一个包含100个查询的批处理。如果批处理中的第40个查询失败,那么批处理中执行的39个查询会发生什么?
我知道在引擎盖下创建了一个批处理日志,它将处理部分批处理的一致性。它是否删除了39个条目中的其余条目并提供批处理查询所需的原子性质。
在MYSQL中,我们将autocommit设置为false,因此我们可以回滚。那些情况下cassandra会回滚吗?
答案 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