Skip to content

批量操作接口

IHEII edited this page Jul 27, 2023 · 5 revisions

批量操作OBKV可以保证单分区的一致性,即如果您在batch中添加多个不同分区的Mutation,他们并不能保证同时成功或者失败. 如果您对一致性有很高的要求,您可以在上层通过区分分区键来使batch只执行单分区批量操作从而达到分区级的一致性.

通过批量操作接口,可以一次性执行多个 Mutation:

// 构造单行操作
Insert insert_0 = insert().setRowKey(row(colVal("c1", 0L), colVal("c2", "row_0")))
                          .addMutateColVal(colVal("c3", new byte[]{1}))
                          .addMutateColVal(colVal("c4", 100L));

Insert insert_1 = insert().setRowKey(row(colVal("c1", 4L), colVal("c2", "row_4")))
                          .addMutateColVal(colVal("c3", new byte[]{1}))
                          .addMutateColVal(colVal("c4", 104L));

Update update_0 = update().setRowKey(row(colVal("c1", 4L), colVal("c2", "row_4")))
                          .addMutateColVal(colVal("c3", new byte[]{1}))
                          .addMutateColVal(colVal("c4", 204L));

// 批量执行所有单行操作
BatchOperationResult batchResult = client.batchOperation("test_mutation")
                                         .setIsAtomic(true)                // 为保证单分区执行出错数据一致性,强烈推荐设置为true
                                         .addMutation(insert_0)
                                         .addMutation(insert_1, update_0)
                                         .execute();

// 打印结果
for (int idx : batchResult.size()) {
	  System.out.println(String.format("the %dth mutation affect %d rows", idx, 
                                     batchResult.get(idx).getAffectedRows()));
}