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


我有一个带有散列和范围复杂键的表。
我可以使用查询项目 GetItem 来自AWS SDK for Java。 该 GetItem 如果找不到对象,则返回null,或者将项目作为a返回 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解析器并自己解析响应以快速检查项目是否已返回。

谢谢


10677
2018-03-20 18:10


起源

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


答案:


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

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


10
2018-02-11 14:00



谈到限制返回的属性,有没有办法限制使用DynamoDBMapper?我没有看到任何方法将ProjectionExpression用于DynamoDBMapper。 - 500865


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


3
2018-03-30 08:20