【发布时间】:2013-12-25 11:12:04
【问题描述】:
我想更新 2 个 CF 中的多行。 我不在乎他们更新的顺序? 但是,如果某个 C* 节点在两者之间发生故障,是否可以保证如果一个成功了,那么最终其他人也会成功吗?
Hector BatchMutation 类使用批量更新或原子批量更新,因为它们是两个不同的东西。
【问题讨论】:
标签: cassandra cql hector astyanax
我想更新 2 个 CF 中的多行。 我不在乎他们更新的顺序? 但是,如果某个 C* 节点在两者之间发生故障,是否可以保证如果一个成功了,那么最终其他人也会成功吗?
Hector BatchMutation 类使用批量更新或原子批量更新,因为它们是两个不同的东西。
【问题讨论】:
标签: cassandra cql hector astyanax
您应该在 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 驱动程序。
【讨论】: