开发手册 欢迎您!
软件开发者资料库

DynamoDB - 批量检索

DynamoDB批量检索 - 从简单和简单的步骤学习DynamoDB,从基本到高级概念,包括概述,基本概念,环境,操作工具,数据类型,创建,加载,查询,删除表,API接口,创建,获取,更新,删除项目,批量写入,批量检索,查询,扫描,索引,全局,本地二级索引,聚合,访问控制,权限API,条件,Web身份联合,数据管道,数据备份,监控,CloudTrail,MapReduce,表活动,错误处理,最佳实践。

批量检索操作返回单个或多个项目的属性.这些操作通常包括使用主键来识别所需的项目. BatchGetItem 操作受各个操作的限制以及它们自己的唯一约束.

批量检索操作中的以下请求导致拒绝 :

  • 请求超过100个项目.

  • 提出超过吞吐量的请求.

批量检索操作对可能超出限制的请求执行部分处理.

例如 : 检索多个大小足以超出限制的项目的请求导致部分请求处理,以及注意未处理部分的错误消息.在返回未处理的项目时,创建一个后退算法解决方案来管理这个而不是限制表.

BatchGet 操作最终执行一致读取,需要修改对于强烈一致的.它们还可以并行执行检索.

注意 : 退回商品的顺序. DynamoDB不对项目进行排序.它也不表示没有所要求的项目.此外,这些请求消耗容量单位.

所有BatchGet操作都需要 RequestItems 参数,例如读取一致性,属性名称和主键.

回复 : 成功的操作会产生HTTP 200响应,表示消耗的容量单位,表处理指标和任何未处理的项目等特征.

使用Java批量检索

在BatchGet操作中使用Java需要创建DynamoDB类实例, TableKeysAndAttributes 类实例,用于描述项的主键值列表,并将TableKeysAndAttributes对象传递给 BatchGetItem 方法.

以下是BatchGet操作的示例 :

DynamoDB dynamoDB = new DynamoDB(new AmazonDynamoDBClient (    new ProfileCredentialsProvider()));  TableKeysAndAttributes forumTableKeysAndAttributes = new TableKeysAndAttributes    (forumTableName);   forumTableKeysAndAttributes.addHashOnlyPrimaryKeys (   "Title",   "Updates",     "Product Line 1"); TableKeysAndAttributes threadTableKeysAndAttributes = new TableKeysAndAttributes (   threadTableName);      threadTableKeysAndAttributes.addHashAndRangePrimaryKeys (   "ForumTitle",   "Topic",     "Product Line 1",   "P1 Thread 1",    "Product Line 1",   "P1 Thread 2",    "Product Line 2",   "P2 Thread 1"); BatchGetItemOutcome outcome = dynamoDB.batchGetItem (    forumTableKeysAndAttributes, threadTableKeysAndAttributes);      for (String tableName : outcome.getTableItems().keySet()) {    System.out.println("Table items " + tableName);    List items = outcome.getTableItems().get(tableName);    for (Item item : items) {       System.out.println(item);    } }

您可以查看以下更大的示例.

注意 : 以下程序可以假定先前创建的数据源.在尝试执行之前,获取支持库并创建必要的数据源(具有所需特征的表或其他引用的源).

此程序还使用Eclipse IDE,AWS凭证文件和Eclipse AWS Java项目中的AWS Toolkit.

package com.amazonaws.codesamples.document;import java.io.IOException;import java.util.List;import java.util.Map;import com.amazonaws.auth.profile.ProfileCredentialsProvider;import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;import com.amazonaws.services.dynamodbv2.document.BatchGetItemOutcome;import com.amazonaws.services.dynamodbv2.document.DynamoDB;import com.amazonaws.services.dynamodbv2.document.Item;import com.amazonaws.services.dynamodbv2.document.TableKeysAndAttributes;import com.amazonaws.services.dynamodbv2.model.KeysAndAttributes;public class BatchGetOpSample {    static DynamoDB dynamoDB = new DynamoDB(new AmazonDynamoDBClient (       new ProfileCredentialsProvider()));          static String forumTableName = "Forum";    static String threadTableName = "Thread";         public static void main(String[] args) throws IOException {       retrieveMultipleItemsBatchGet();    }   private static void retrieveMultipleItemsBatchGet() {               try {          TableKeysAndAttributes forumTableKeysAndAttributes =             new TableKeysAndAttributes(forumTableName);                   //Create partition key          forumTableKeysAndAttributes.addHashOnlyPrimaryKeys (            "Name",             "XYZ Melt-O-tron",             "High-Performance Processing"         );          TableKeysAndAttributes threadTableKeysAndAttributes =             new TableKeysAndAttributes(threadTableName);                   //Create partition key and sort key          threadTableKeysAndAttributes.addHashAndRangePrimaryKeys (            "ForumName",            "Subject",              "High-Performance Processing",            "HP Processing Thread One",             "High-Performance Processing",            "HP Processing Thread Two",             "Melt-O-Tron",            "MeltO Thread One"         );         System.out.println("Processing...");          BatchGetItemOutcome outcome = dynamoDB.batchGetItem(forumTableKeysAndAttributes,            threadTableKeysAndAttributes);                        Map unprocessed = null;             do {             for (String tableName : outcome.getTableItems().keySet()) {                System.out.println("Table items for " + tableName);                List items = outcome.getTableItems().get(tableName);                               for (Item item : items) {                   System.out.println(item.toJSONPretty());                }             }             // Confirm no unprocessed items             unprocessed = outcome.getUnprocessedKeys();                              if (unprocessed.isEmpty()) {                System.out.println("All items processed.");             } else {                System.out.println("Gathering unprocessed items...");                outcome = dynamoDB.batchGetItemUnprocessed(unprocessed);             }          } while (!unprocessed.isEmpty());       } catch (Exception e) {          System.err.println("Could not get items.");          System.err.println(e.getMessage());       }      } }