【问题标题】:Quickly query a table if it contains a key (DynamoDB and Java)快速查询包含键的表(DynamoDB 和 Java)
【发布时间】:2012-03-20 18:10:10
【问题描述】:

我有一个带有哈希和范围复杂键的表。
我可以使用 AWS SDK for Java 中的 GetItem 查询项目。 GetItem 如果没有找到对象,则返回 null,或者将项目作为 Map<String, AttributeValue>
我正在寻找检查对象是否存在的最快方法
我在想也许可以提供一个.withAttributesToGet,例如:

GetItemResult result =  dbClient.getItem(new GetItemRequest().
    withTableName(TABLE_NAME).
        withKey(new Key(new AttributeValue().withS(hashKey),
                        new AttributeValue().withS(rangeKey))).
        withAttributesToGet(new ArrayList<String>()));
Map<String, AttributeValue> item = result.getItem();
return (item != null);

另外一个优化是不使用SDK JSON解析器,自己解析响应,快速检查item是否返回。

谢谢

【问题讨论】:

  • “最快”是什么意思?这里的实际瓶颈是什么?

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


【解决方案1】:

我认为“获取”和检查是否存在之间的速度差异可以忽略不计。您可以继续使用 GetItem 本身。如果项目可能太大,则限制返回的属性。

瓶颈在于延迟到达 Dynaamo DB 服务器 (REST API) 和从索引中获取。因此,获取和检查的速度将相似。确保发出调用的服务器与 Dynamo DB 位于同一区域 - 这对速度的影响最大。

【讨论】:

  • 说到限制返回的属性,有没有办法限制使用DynamoDBMapper?我看不到任何将 ProjectionExpression 与 DynamoDBMapper 结合使用的方法。
【解决方案2】:

通过仅提及哈希键作为要获取的属性,您可以获得更好的性能并且不会浪费您的吞吐量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2011-12-27
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2017-10-25
    • 2021-06-14
    相关资源
    最近更新 更多