2012-03-20 6 views
10

Ho una tabella con una chiave complessa hash e intervallo.
Posso interrogare un elemento utilizzando GetItem da AWS SDK per Java. Il GetItem restituisce null se non trova l'oggetto o l'articolo come Map<String, AttributeValue>.
Sto cercando l'approccio più veloce per verificare se l'oggetto esiste
Stavo pensando che forse fornire un .withAttributesToGet come ad esempio:Interroga rapidamente una tabella se contiene una chiave (DynamoDB e 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); 

Un'altra ottimizzazione è di non usare il parser SDK JSON e analizzare la risposta me stesso per controllare rapidamente se l'articolo è tornato.

Grazie

+1

Cosa intendi per "più veloce"? Che cosa è il collo di bottiglia attuale qui? – tddmonkey

risposta

9

Penso che ci sia una differenza trascurabile di velocità tra "ottenere" e verificare se esiste. Puoi andare avanti e usare lo stesso GetItem. Se l'elemento è potenzialmente troppo grande, limitare gli attributi restituiti.

Il collo della bottiglia è in latenza per raggiungere i server Dynaamo DB (API REST) ​​e nel recupero dall'indice. Quindi Ottenere e controllare sarà una velocità simile. Assicurarsi che il server che ha effettuato la chiamata si trovi nella stessa area di Dynamo DB: questo ha un impatto massimo sulla velocità.

+0

Parlando di limitare gli attributi restituiti, esiste un modo per limitare l'utilizzo di DynamoDBMapper? Non vedo alcun modo di utilizzare ProjectionExpression con DynamoDBMapper. – 500865

3

menzionando solo il tasto cancelletto come attributi per ottenere, si potrebbe avere migliori prestazioni e non perdete il vostro rendimento.

Problemi correlati