Cassandra:带条件的批处理不能跨越多个表
Cassandra: Batch with conditions cannot span multiple tables
我正在尝试使用 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 中无法执行上述操作,有什么替代方法可以将多个条件插入作为事务执行并确保全部成功或全部失败?
恐怕别无选择。 BATCH
环境中的条件语句仅限于单个 table,我认为未来没有更改的空间。
这是由于 Cassandra 内部的工作方式:包含条件更新的批处理(称为 轻量级事务)只能在一个分区中使用,因为它们基于Paxos 实现,因为 Paxos 本身仅在分区级别工作。此外,在同一个 BATCH 中有多个条件语句的批处理中,必须验证所有条件才能批处理成功。即使一个(且唯一)条件更新失败,整个批次也会失败。
您可以在 documentation 中阅读有关 BATCH
语句的更多信息。
条件更新和批处理操作的性能基本上都会受到影响,而 C* 会阻止您走得更远。
在我看来,您设计的它类似于 RDBMS。一个 No-SQL 替代解决方案,但我不知道它是否可以应用于您的用例,您可以在第 4 个 table 中对数据进行非规范化,该第 4 个 table 结合了所有其他 3 tables,然后向第 4 个 table.
提供单个更新
我正在尝试使用 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 中无法执行上述操作,有什么替代方法可以将多个条件插入作为事务执行并确保全部成功或全部失败?
恐怕别无选择。 BATCH
环境中的条件语句仅限于单个 table,我认为未来没有更改的空间。
这是由于 Cassandra 内部的工作方式:包含条件更新的批处理(称为 轻量级事务)只能在一个分区中使用,因为它们基于Paxos 实现,因为 Paxos 本身仅在分区级别工作。此外,在同一个 BATCH 中有多个条件语句的批处理中,必须验证所有条件才能批处理成功。即使一个(且唯一)条件更新失败,整个批次也会失败。
您可以在 documentation 中阅读有关 BATCH
语句的更多信息。
条件更新和批处理操作的性能基本上都会受到影响,而 C* 会阻止您走得更远。
在我看来,您设计的它类似于 RDBMS。一个 No-SQL 替代解决方案,但我不知道它是否可以应用于您的用例,您可以在第 4 个 table 中对数据进行非规范化,该第 4 个 table 结合了所有其他 3 tables,然后向第 4 个 table.
提供单个更新