1.5.9 事务操作

优质
小牛编辑
130浏览
2023-12-01

事务操作包含3个接口:newTransaction,transactionGet ,transactionCommit

Transaction newTransaction()

功能

初始化transaction操作,Transaction内保证事务原子性

方法返回值

Transaction对象记录事务信息

GetResult transactionGet(Transaction transaction, GetRequest getRequest)

功能

Transaction内一致性的读操作,能读到transaction时间点前的数据

方法参数

1.transaction : Transaction : required
2.getRequest : GetRequest : required

方法返回值

item : Map< String, Datum > 返回的所指定的属性的值

BatchResult transactionCommit(Transaction transaction, BatchRequest batchRequest)

功能

提供跨表多行写的原子操作,目前只支持put,remove操作,会比普通的batch操作耗费更多的quota 同一个batch中多个操作修改同一行数据可能导致未定义行为(数据不一致), 应当避免,另外如果一个batch包含同一行的写操作,其执行顺序是不确定的,不推荐使用

方法参数

1.transaction : Transaction : required

2.batchRequest : BatchRequest : required

BatchRequest 包括一个可以为PutRequest, RemoveRequest的列表

1).items : List< BatchRequestItem > : required

BatchRequestItem包括BatchOp和Request

枚举类型BatchOp(PUT, REMOVE)指定该request的操作类型,

相应的,使用putRequest, removeRequest构造Request参数

方法返回值

batchResult : BatchResult

BatchResult 包括一个带有BatchResultItem的列表,表示batch的每个请求的执行结果

items : List< BatchResultItem >

返回每个子操作的结果

限制

transactionCommit 请求不支持带条件的batchRequest

异常错误码

INTERNAL_ERROR(1) : 服务器异常

ACCESS_DENIED(4) : 用户对该表没有读权限

VALIDATION_FAILED(5): batchRequest中的request参数设置错误

THROUGHPUT_EXCEED(8): 当前读写速度已超过该表的读写配额

RESOURCE_NOT_FOUND(9) : 所指定的表不存在

注意以下几点

1.事务操作不支持具有局部二级索引的表

2.事务操作需要开启表级别的属性enableTransaction(此属性只能在创建新表时指定,无法修改),可在控制台勾选或sdk中指定

3.具有全局二级索引的表是开启enableTransaction属性的