当前位置: 首页 > 知识库问答 >
问题:

Cassandra中的原子批次

许振海
2023-03-14

你说的批处理语句在卡桑德拉中是原子的是什么意思?确切地说,文档在本质上有点令人困惑。这是否意味着查询在群集中的节点之间是原子的?

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

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

在MYSQL中,我们将自动提交设置为false,因此我们可以回滚。在这些情况下,cassandra会回滚吗?

共有3个答案

施彦
2023-03-14

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

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

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

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

尹辰沛
2023-03-14

它们实际上被称为日志批处理,而不是原子批处理。您得到的不仅仅是提示(任何写入都会得到),您还可以在协调器开始进行写入之前将批处理复制到其他2个节点。

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

对于您的具体问题“它是否删除了剩余的39个条目,并提供了批处理查询所需的原子特性”

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

赖诚
2023-03-14

原子性是基于配位体的。这意味着当你进行一次原子批量突变时,它会去找一个协调者。如果您的批处理中的一个突变,在您的示例中是40个,因为负责它的副本死了而失败,协调器将为该副本写一个提示,并在死节点备份时交付它。

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

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

 类似资料:
  • 我计划使用cassandra作为我的应用程序的nosql数据存储。我的用例之一是更新用户的“余额”。假设每个用户的余额存储为一个关键UID_balance。现在,如果我的应用程序想要更新多个用户的余额,我将如何处理原子性? 我想,在某个时刻,应用程序基本上将执行以下操作: 现在,这里有几个问题: 与cassandra的连接可能会中断,导致代码只更新少数用户的余额 在步骤2和4之间,可能有另一个进程

  • 在Cassandra中,用于同时执行多个修改语句(插入,更新,删除)。 当你必须更新一些以及删除一些现有的列是非常有用的。 语法 实例: 让我们举个例子来演示命令。 在这里,我们有一个名为“”的表,其中包含列(,,),具有以下数据。 在这个例子中,我们将执行BATCH(插入,更新和删除)操作: 插入一个包含以下信息的新行(,,)。 更新行ID为的学生的列的值为。 删除具有行ID为的雇员的值。 完整

  • 是否可以在ElasticSearch中进行批量原子更新? 我知道定期批量更新不是原子的,正如这里所指出的:https://www.elastic.co/guide/en/elasticsearch/guide/current/bulk.html#bulk 还有其他方法可以自动更新多个文档吗?即。要么所有更新都发生,要么没有更新。

  • 我有一个Java客户端,它批量推送(INSERT)记录到Cassandra集群。批处理中的元素都有相同的行键,所以它们都将被放置在同一个节点中。此外,我不需要事务是原子的,所以我一直在使用未记录的批处理。 每批INSERT命令的数量取决于不同的因素,但可以在5到50000之间。首先,我只是在一批中放入尽可能多的命令并提交。这com.datastax.driver.core.exceptions.I

  • 我被删除时的火神留档弄糊涂了。留档说: 也不能保证删除操作会统一成功或失败,因此请准备好处理部分删除的情况......没有原子删除集合的操作。 https://cloud.google.com/firestore/docs/solutions/delete-collections 我不知道上面的语句是否只是指示例中的云函数,还是通常执行大规模删除。 然而,批写入可以执行删除,并且它们是原子的。因此

  • 我们使用卡桑德拉批处理语句来持久化数据。我们收到“批处理太大”异常。我了解批大小中的数据超过了批大小失败阈值。我需要帮助来计算批次的大小。有没有办法找出批量传递的数据的确切大小?