- 1.3 SDS服务简介
- 1.3.1 帐号注册
- 1.3.2 数据模型
- 1.3.3 二级索引
- 1.3.4 支持的操作
- 1.3.5 配额说明
- 1.3.6 计量计费
- 1.3.7 AutoScaling
- 1.3.8 Stream
- 1.3.9 Recovery
- 1.3.10 冷备
- 1.3.11 权限模型
- 1.3.12 集群信息
- 1.3.13 Client配置
- 1.3.14 多语言SDK
- 1.3.15 离线分析
- 1.3.16 监控统计
- 1.3.17 数据加密
- 1.3.18 示例
- 1.4 API
- 1.4.1 创建表
- 1.4.2 修改表
- 1.4.3 克隆表
- 1.4.4 禁用表
- 1.4.5 启用表
- 1.4.6 删除表
- 1.4.7 描述表
- 1.4.8 获得表的状态
- 1.4.9 列出所有表
- 1.5 API
- 1.5.1 写记录
- 1.5.2 读记录
- 1.5.3 删除记录
- 1.5.4 自增操作
- 1.5.5 批量操作
- 1.5.6 带条件的批量写操作
- 1.5.7 允许部分执行的批量操作
- 1.5.8 扫描记录
- 1.5.9 事务操作
- 1.6 FAQ
- 1.6.1 认证授权
- 1.6.2 数据模型
- 1.6.3 旧版帐号迁移到新版
- 1.6.4 RESOURCE_NOT_FOUND异常
- 1.6.5 常见错误
1.5.7 允许部分执行的批量操作
BatchResult partialAllowedBatch(BatchRequest request)
功能
一般的batch请求,当表quota不足时会全部拒绝;而partialAllowedBatch允许在quota满足的范围内,部分记录可以执行, 通过返回值告知用户哪些记录执行成功,哪些记录没有执行, 若当前quota不满足甚至1条记录执行,会抛出THROUGHPUT_EXCEED异常; 用户需要检查返回值,把没有执行的记录循环地发请求,直到所有记录都成功执行为止。
方法参数
request : BatchRequest : required
BatchRequest 包括一个可以为PutRequest, RemoveRequest, GetRequest, IncrementRequest的列表
1.items : List< BatchRequestItem > : required
BatchRequestItem包括BatchOp和Request
枚举类型BatchOp(PUT, GET, REMOVE, INCREMENT)指定该request的操作类型,
相应的,使用putRequest,getRequest, removeRequest,incrementRequest构造Request参数
方法返回值
batchResult : BatchResult
BatchResult 包括一个带有BatchResultItem的列表,表示batch的每个请求的执行结果
items : List< BatchResultItem >
返回每个子操作的结果,其中isSuccess==true表示已经执行,isSuccess==false表示没有执行
限制
每个子操作必须是同一个表的
put,remove请求不支持带条件
batch操作的子操作数范围为[ 1, 100 ]
示例
下面示例代码
List<BatchRequestItem> batch = new ArrayList<BatchRequestItem>();
for (int i = 11; i < 20; i++) {
BatchRequestItem item = new BatchRequestItem().setAction(BatchOp.PUT);
Map<String, Datum> record = new HashMap<String, Datum>();
record.put("cityId", DatumUtil.toDatum(cities[i]));
putRequest.putToRecord("timestamp", DatumUtil.toDatum(now.getTime()));
putRequest.putToRecord("score", DatumUtil.toDatum((double) new Random().nextInt(100)));
putRequest.putToRecord("pm25", DatumUtil.toDatum((long) (new Random().nextInt(500))));
item.setRequest(Request.putRequest(new PutRequest().setTableName(tableName).setRecord(record)));
batch.add(item);
}
while (true) {
BatchResult br = tableClient.partialAllowedBatch(new BatchRequest().setItems(batch));
List<BatchRequestItem> request = new ArrayList<BatchRequestItem>();
for (int i = 0; i < br.getItems().size(); i++) {
//At current only quota exceeded will get isSuccess() == false
if (!br.getItems().get(i).isSuccess()) {
request.add(batch.get(i));
}
}
if (request.isEmpty()) {
break;
}
Thread.sleep(100); // wait a while to retry.
batch = request;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论