HBase(Intra)RowTransactions
时间:2021-07-01 10:21:17
帮助过:26人阅读
As said in a previous post "HBase ensures that all new versions created by single Put operation for a particular rowkey are either all seen by other clients or seen by none." Indeed HBase can execute atomic Put operations and atomic Delete
As said in a previous post "HBase ensures that all new versions created by single Put operation for a particular
rowkey are either all seen by other clients or seen by none."
Indeed HBase can execute atomic Put operations and atomic Delete operations (as well as a few specialized operations like Increment and Append).
What HBase cannot currently do is to execute a grouping of different operations atomically. For example you cannot execute a Put and Delete operation atomically.
HBASE-3584 and HBASE-5203 change that. It is now possible to group multiple Puts and Deletes for the
same row key together as a single atomic operation. The combined operation is atomic even when the executing regionserver fails half way through the operation.
The client facing API looks like this:
HTable t = ...;byte[] row = ...; RowMutation arm = new RowMutation(row);Put p = new Put(row);p.add(...)Delete d = new Delete(now);p.delete{Column|Columns|Family}(...);arm.add(p);arm.add(d);t.mutateRow(arm); RowMutation implements the Row interface and can hence itself be part of a multi row batch operation:
HTable t = ...;byte[] row1, row2; RowMutation arm1 = new RowMutation(row1);RowMutation arm2 = new RowMutation(row2);...List rows = ...;
rows.add(arm1);rows.add(arm2);t.batch(rows);But note that this multi row batch is not atomic
between different rows.
原文地址:HBase (Intra) Row Transactions, 感谢原作者分享。