如果表包含密钥(DynamoDB和Java),则快速查询表

时间:2012-03-20 18:10:10

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

我有一个带有哈希和范围复合键的表 我可以使用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解析器并自己解析响应以快速检查项目是否已返回。

由于

2 个答案:

答案 0 :(得分:15)

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

瓶颈处于到达Dynaamo数据库服务器(REST API)和从索引获取的延迟时间。所以获取和检查将是类似的速度。确保发出呼叫的服务器与Dynamo DB位于同一区域 - 这对速度有最大影响。

答案 1 :(得分:5)

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