2012-03-20 6 views
10

Mam tabelę z kluczem mieszania i zakresu złożonych.
Mogę zapytać o element przy użyciu GetItem z AWS SDK dla Java. GetItem zwraca wartość null, jeśli nie znajduje obiektu lub element jako Map<String, AttributeValue>.
szukam najszybszy podejście, by sprawdzić, czy obiekt istnieje
Myślałam może dostarczający .withAttributesToGet takich jak:Szybkie zapytanie do tabeli, jeśli zawiera klucz (DynamoDB i 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); 

Innym optymalizacji jest, aby nie używać parsera SDK JSON i analizowania odpowiedzi sobie aby szybko sprawdzić, czy przedmiot został zwrócony.

Dzięki

+1

Co masz na myśli przez "najszybszy"? Jakie jest obecne wąskie gardło? – tddmonkey

Odpowiedz

9

Sądzę, że istnieje nieznaczna różnica w prędkości między "otrzymywaniem" a sprawdzaniem, czy istnieje. Możesz śmiało korzystać z samego GetItem. Jeśli przedmiot jest potencjalnie zbyt duży, ogranicz limity zwracanych atrybutów.

Szyjka butelki jest opóźniona, aby dotrzeć do serwerów Dynaamo DB (REST API) i pobierania z indeksu. Więc Pierwszeństwo i kontrola będą miały podobną prędkość. Upewnij się, że twój serwer wysyłający połączenie znajduje się w tym samym regionie co Dynamo DB - Ma to maksymalny wpływ na szybkość.

+0

Mówiąc o ograniczaniu zwracanych atrybutów, czy istnieje sposób ograniczenia używania DynamoDBMapper? Nie widzę sposobu na użycie ProjectionExpression z DynamoDBMapper. – 500865

3

przez wymienienie tylko klawisz skrótu jako atrybuty dostać, można mieć lepszą wydajność i nie trać przepustowości.