obkv的obtableclient.java里有2个insert接口,在github上的说明文档里用的是返回Insert类型的接口;在客户端代码里的demo调用的是返回long类型的接口,请问这2个接口的区别是什么呢?
推荐使用说明文档中的接口:单行操作接口 · oceanbase/obkv-table-client-java Wiki · GitHub
两者的功能是一样的,主要区别在于使用上,新接口需要在填充rowkey时指定列名。
新版本接口:
Insert insert tableClient.insert("test_table")
.setRowKey(row(colVal("c1", 0L), colVal("c2", "row_0")))
.addMutateColVal(colVal("c3", new byte[]{1}))
.addMutateColVal(colVal("c4", 100L))
MutationResult result = insert.execute();
旧版本接口:
long rows = obTableClient.insert(tableName, key, new String[]{"c2", "c3"}, values);
好的,我还想问一下,在这个insert.execute()的实现中,调用insertWithResult()前没有对rowkey按某种固定规则排序,也没有将rowkeyName传入其中。在update.execute()也是这样。
那么如果调用接口时传入的rowkey顺序不同,例如:
insert时insert.setRowKey(row(colVal(“c1”, 1), colVal(“c2”, 2)));
而update时update.setRowKey(row(colVal(“c2”, 2), colVal(“c1”, 1)));
如何保证update时的正确性?因为insertWithResult传入的rowkey是1, 2,而updateWithResult传入的rowkey是2, 1,如果按传入顺序对比数值的话并不相同,但如果搭配列名看其实是相同的。
还是说调用接口时必须强制update等操作时传入rowkey的顺序必须和insert时相同,即使已经同时指定了列名?