- 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.5 批量操作
BatchResult batch(BatchRequest request)
功能
批量读写操作,消耗各自对应的读写配额。同一个batch中多个操作修改同一行数据可能导致未定义行为(数据不一致),
应当避免,另外如果一个batch包含同一行的读和写操作,其执行顺序是不确定的,不推荐使用
另外,要注意以下两点:
1.同一个batch里的子操作不保证顺序
2.batch操作不保证原子性,当返回成功即所有子操作都成功,如果返回异常,有可能部分成功部分失败
方法参数
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 >
返回每个子操作的结果
异常错误码
INTERNAL_ERROR(1) : 服务器异常
ACCESS_DENIED(4) : 用户对该表没有读权限
VALIDATION_FAILED(5): batchRequest中的request参数设置错误
THROUGHPUT_EXCEED(8): 当前读写速度已超过该表的读写配额
RESOURCE_NOT_FOUND(9) : 所指定的表不存在
限制
每个子操作必须是同一个表的
put,remove请求不支持带条件
batch操作的子操作数范围为[ 1, 100 ]
示例
以示例表为例,下面给出批量操作的示例代码
$categories = array("work", "travel", "food");
$tableName = 'php-note';
$batch = array();
for ($i = 0; $i < 20; $i++) {
$version = 0; // initial version
$insert = new PutRequest(array(
"tableName" => $tableName,
"record" => Array(
"userId" => DatumUtil::datum("user1"),
"noteId" => DatumUtil::datum($i),
"title" => DatumUtil::datum("Title $i"),
"content" => DatumUtil::datum("note $i"),
"version" => DatumUtil::datum($version),
"mtime" => DatumUtil::datum((new \DateTime())->getTimestamp()),
"category" => DatumUtil::datum($categories[rand(0, sizeof($categories) - 1)]),
)));
$batchItem = new BatchRequestItem(array(
"action" => BatchOp::PUT,
"request" => new Request(array(
"putRequest" => $insert
))
));
$batch[$i] = $batchItem;
}
$batchRequest = new BatchRequest(array(
"items" => $batch
));
$tableClient->batch($batchRequest);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论