2012-03-20 18 views
10

Tengo una tabla con una clave compleja de hash y rango.
Puedo consultar un artículo usando GetItem de AWS SDK para Java. GetItem devuelve nulo si no encuentra el objeto, o el elemento como Map<String, AttributeValue>.
Busco el enfoque más rápido para comprobar si existe el objeto
Estaba pensando que quizás el suministro de una .withAttributesToGet tales como:Consulta rápidamente una tabla si contiene una clave (DynamoDB y 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); 

Otra optimización es no utilizar el analizador SDK JSON y analizar la respuesta a mí mismo para verificar rápidamente si el artículo ha regresado.

Gracias

+1

¿Qué quiere decir con "más rápido"? ¿Cuál es el cuello de botella real aquí? – tddmonkey

Respuesta

9

Creo que hay una diferencia insignificante en la velocidad entre "obtener" y verificar si existe. Puede continuar y usar el GetItem mismo. Si el artículo es potencialmente demasiado grande, limite los atributos que se devuelven.

El cuello de la botella está en latencia para llegar a los servidores Dynaamo DB (API REST) ​​y para recuperarlo del índice. Entonces obtener y verificar será una velocidad similar. Asegúrese de que su servidor que emite la llamada se encuentre en la misma región que Dynamo DB. Esto tiene un impacto máximo en la velocidad.

+0

Hablando de limitar los atributos que se devuelven, ¿hay alguna forma de limitar el uso de DynamoDBMapper? No veo ninguna forma de usar ProjectionExpression con DynamoDBMapper. – 500865

3

mencionando únicamente la clave hash como atributos de conseguir, que podrían tener un mejor rendimiento y no pierda su rendimiento.

Cuestiones relacionadas