geo*_*sos 2 batch-processing cassandra nosql datastax cassandra-3.0
我试图通过使用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
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
Batch with conditions cannot span multiple tables
Run Code Online (Sandbox Code Playgroud)
如果在Cassandra中无法实现上述目标,那么将多个条件插入作为事务执行并确保所有成功或全部失败的替代方法是什么?
我担心没有其他选择.BATCH环境中的条件语句仅限于单个表,我认为未来还有改变的余地.
这是由于Cassandra内部工作原因:包含条件更新的批处理(称为轻量级事务)只能在一个分区中使用,因为它们基于Paxos实现,因为Paxos本身仅在分区级别工作.此外,在同一BATCH中具有多个条件语句的批处理中,必须验证所有条件以使批处理成功.即使一个(且唯一的)条件更新失败,整个批处理也将失败.
您可以BATCH在文档中阅读有关语句的更多信息.
您基本上可以获得条件更新的性能损失,以及批量操作的性能损失,而C*会阻止您到目前为止.
在我看来,你设计了类似RDBMS.一个No-SQL替代解决方案,我不知道它是否可以应用于您的用例,您可以在第4个表中对数据进行非规范化,该表组合了所有其他3个表,然后为第4个表提供单个更新.
| 归档时间: |
|
| 查看次数: |
1911 次 |
| 最近记录: |