卡桑德拉的批量突变?

时间:2013-12-08 09:56:28

标签: cassandra cql hector astyanax

我想更新2 CF中的多行。 我不关心他们更新的订单? 但是,如果一个人获得成功,那么它是否能够保证,如果某个C *节点之间出现故障,最终其他人也会获得成功?

Hector BatchMutation类使用批量更新或原子批量更新,因为这些是两个不同的东西。

1 个答案:

答案 0 :(得分:1)

您应该在CQL3中使用原子批处理。这可以保证整个批次成功或整个批次失败。 CQL3 docs

中的一个示例
BEGIN BATCH
  INSERT INTO users (userid, password, name) VALUES ('user2', 'ch@ngem3b', 'second user');
  UPDATE users SET password = 'ps22dhds' WHERE userid = 'user3';
  INSERT INTO users (userid, password) VALUES ('user4', 'ch@ngem3c');
  DELETE name FROM users WHERE userid = 'user1';
APPLY BATCH;

Hector BatchMutation类使用Thrift操作batch_mutate。这比atomic_batch_mutate弱,后者是上述Thrift的等价物。 batch_mutate对于同一个键的更新只是原子的(虽然可以是不同的CF),而atomic_batch_mutate在所有更新中都是原子的。我不认为Hector已经实现了atomic_batch_mutate,因此您需要转移到CQL3和支持CQL3的驱动程序,例如DataStax的java驱动程序。