2012-03-20 2 views
10

J'ai une table avec une clé complexe de hachage et de distance.
Je peux interroger un élément à l'aide de GetItem à partir d'AWS SDK for Java. Le GetItem renvoie la valeur null s'il ne trouve pas l'objet ou l'élément en tant que Map<String, AttributeValue>.
Je cherche la plus rapide approche pour vérifier si l'objet existe
je pensais fournir peut-être un .withAttributesToGet comme:Demande rapide d'une table si elle contient une clé (DynamoDB et 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); 

Une autre optimisation est de ne pas utiliser l'analyseur SDK JSON et analyser la réponse moi-même pour vérifier rapidement si l'article est retourné.

Merci

+1

Que voulez-vous dire par "plus rapide"? Quel est le goulot d'étranglement réel ici? – tddmonkey

Répondre

9

Je pense qu'il y a une différence de vitesse négligeable entre "obtenir" et vérifier si elle existe. Vous pouvez aller de l'avant et utiliser le GetItem lui-même. Si l'élément est potentiellement trop volumineux, limitez les attributs renvoyés.

Le col de la bouteille est en latence pour atteindre les serveurs de base de données Dynaamo (API REST) ​​et pour l'extraction à partir de l'index. Donc, Obtenir et vérifier sera la même vitesse. Assurez-vous que votre serveur émet l'appel dans la même région que Dynamo DB - Cela a un impact maximal sur la vitesse.

+0

En parlant de limiter les attributs retournés, est-il un moyen de limiter l'utilisation de DynamoDBMapper? Je ne vois aucun moyen d'utiliser ProjectionExpression avec DynamoDBMapper. – 500865

3

en mentionnant que la clé de hachage comme attributs pour obtenir, vous pourriez avoir de meilleures performances et ne perdez pas votre débit.

Questions connexes