返回介绍

1.5.5 批量操作

发布于 2020-10-01 15:06:22 字数 5014 浏览 1079 评论 0 收藏 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文