2012-03-20 84 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

通過提只在屬性來獲得哈希鍵,你可以有更好的表現,不要浪費你的吞吐量。