使用轻量级事务批更新cassandra

使用轻量级事务批更新cassandra,cassandra,Cassandra,我使用的是cassandra 2.2.3,我想用两条语句进行批量更新。两者都使用轻量级事务 BEGIN BATCH UPDATE account SET values['balance'] = 11 WHERE id = 1 IF values['balance'] = 10; UPDATE account SET values['balance'] = 11 WHERE id = 2 IF values['balance'] = 10; APPLY BATCH; 批处理返回以下错误: Inv

我使用的是cassandra 2.2.3,我想用两条语句进行批量更新。两者都使用轻量级事务

BEGIN BATCH
UPDATE account SET values['balance'] = 11 WHERE id = 1 IF values['balance'] = 10;
UPDATE account SET values['balance'] = 11 WHERE id = 2 IF values['balance'] = 10;
APPLY BATCH;
批处理返回以下错误:

InvalidRequest: code=2200 [Invalid query] message="Batch with conditions cannot span multiple partitions".
我知道由于分区的原因,在where子句中不可能对各种PK进行批处理,但是为什么不可能对同一PK进行批处理呢?问题是IF语句,如果删除它们,批处理将正常工作

那么,有没有成功执行此类批量更新的解决方案?或者有什么解决办法

编辑: 这是我的模式:

CREATE TABLE booking.account (
 id int PRIMARY KEY,
 values map<varchar, decimal>,
 timestampCreate timestamp,
 timestampUpdate timestamp
);
CREATE TABLE booking.account(
id int主键,
价值地图,
时间戳创建时间戳,
时间更新时间戳
);
我理解,在中国,不可能对各种PK进行批量生产 where子句是因为分区,但是为什么它不可能呢 在同一主键上做一批

您可以在where子句中对各种PK进行批处理,但不建议这样做(请参阅)

这里的问题是条件更新(if语句)。引自

在Cassandra 2.0.6及更高版本中,您可以批处理条件更新 在Cassandra 2.0中作为轻量级事务引入。仅更新 由于 底层Paxos实现在 隔断您可以将具有条件的更新与具有条件的更新分组 不要,但当批处理中的单个语句使用条件时 整个批使用单个Paxos方案提交,就像所有 批次中包含的条件适用


那么您真的需要批处理语句吗?阅读此

你能显示表格模式吗?我将模式添加到帖子中。谢谢你的链接。我使用批处理的目的是对两个帐户执行相同的“预订”,要么所有帐户都成功执行,要么没有。我的意思是使用CAS和batch的组合将是一个很好的组合。是的,我认为没有其他解决方案。这是一个很好的两阶段提交链接(在mongoDB中),我将尝试一下。非常感谢。