1.5.9 事务操作
事务操作包含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属性的