2012-03-20 78 views
10

我有一个表与散列和范围复杂键。
我可以使用AWS SDK for Java中的GetItem查询项目。 如果GetItem未找到对象,或者该项目为Map<String, AttributeValue>,则返回null。
我正在寻找最快的方法来检查对象是否确实存在
我想也许供应.withAttributesToGet如:快速查询表,如果它包含一个键(DynamoDB和Java)

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解析器和解析响应自己快速检查项目是否已经返回。

感谢

+1

你是什么意思“最快”?这里的实际瓶颈是什么? – tddmonkey 2012-10-13 20:12:47

回答

9

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

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

+0

谈到限制返回的属性,是否有限制使用DynamoDBMapper的方法?我没有看到使用ProjectionExpression和DynamoDBMapper的方法。 – 500865 2016-04-18 20:05:02

3

通过提只在属性来获得哈希键,你可以有更好的表现,不要浪费你的吞吐量。

相关问题