【问题标题】:Cassandra: Batch with conditions cannot span multiple tablesCassandra:有条件的批处理不能跨越多个表
【发布时间】:2017-04-21 03:36:18
【问题描述】:

我正在尝试使用 Cassandra cpp-driver 对批处理中的不同表执行 3 个条件插入:

BEGIN BATCH 
insert into table1 values (...) IF NOT EXISTS 
insert into table2 values (...) IF NOT EXISTS 
insert into table3 values (...) IF NOT EXISTS 
APPLY BATCH

但我收到以下错误:

Batch with conditions cannot span multiple tables

如果在 Cassandra 中无法实现上述操作,那么将多个条件插入作为事务执行并确保全部成功或全部失败的替代方法是什么?

【问题讨论】:

    标签: cassandra batch-processing datastax cassandra-3.0 nosql


    【解决方案1】:

    恐怕别无选择。 BATCH 环境中的条件语句仅限于单个表,我认为将来没有更改的空间。

    这是由于 Cassandra 内部的工作方式:包含条件更新的批处理(称为 轻量级事务)只能在一个分区中使用,因为它们基于 Paxos 实现,因为Paxos 本身只在分区级别工作。而且,在同一个BATCH中有多个条件语句的批处理中,必须验证所有条件才能批处理成功。即使一个(也是唯一的)条件更新失败,整个批次也会失败。

    您可以在documentation 中阅读有关BATCH 语句的更多信息。

    基本上,条件更新的性能会受到影响,批处理操作的性能会受到影响,而 C* 会阻止您到目前为止。

    在我看来,您将其设计为类似 RDBMS。一个 No-SQL 替代解决方案,我不知道它是否可以应用于您的用例,您可以在结合所有其他 3 个表的第 4 个表中对数据进行非规范化,然后为第 4 个表提供单个更新.

    【讨论】:

      猜你喜欢
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多