针对不存在的键的Dynamodb batchgetItem API行为

时间:2015-03-15 05:08:21

标签: exception amazon-web-services amazon-dynamodb

如果dynamodb中没有密钥,DynamoDb BatchGetItem API的行为是什么? 它是返回空列表还是抛出异常?

阅读完他们的文档后我对此不确定:link 但我可能会遗漏一些东西。

1 个答案:

答案 0 :(得分:0)

BatchGetItem不会抛出异常。这些项目的结果将不会出现在响应中的Responses地图中。这也在BatchGetItem documentation

中说明
  

如果请求的项目不存在,则不会在结果中返回。   对不存在的项目的请求消耗最小读取容量单位   根据阅读的类型。有关更多信息,请参阅容量   Amazon DynamoDB开发人员指南中的单位计算。

此行为也很容易验证。这是针对具有名为customer_id的哈希键属性的表(我使用的完整示例是here):

dynamoDB.batchGetItem(new BatchGetItemSpec()
        .withTableKeyAndAttributes(new TableKeysAndAttributes(EXAMPLE_TABLE_NAME)
                .withHashOnlyKeys("customer_id", "ABCD", "EFGH")
                .withConsistentRead(true)))
        .getTableItems()
        .entrySet()
        .stream()
        .forEach(System.out::println);

dynamoDB.batchGetItem(new BatchGetItemSpec()
        .withTableKeyAndAttributes(new TableKeysAndAttributes(EXAMPLE_TABLE_NAME)
                .withHashOnlyKeys("customer_id", "TTTT", "XYZ")
                .withConsistentRead(true)))
        .getTableItems()
        .entrySet()
        .stream()
        .forEach(System.out::println);

输出:

example_table=[{ Item: {customer_email=jim@gmail.com, customer_name=Jim, customer_id=ABCD} }, { Item: {customer_email=garret@gmail.com, customer_name=Garret, customer_id=EFGH} }]
example_table=[]