2012-02-09 17 views
5

Necesito ejecutar una consulta IN en el atributo clave. Como Query no proporciona condiciones IN, estoy planeando utilizar Scan. ¿ESCANEARÁ en el atributo clave escanear toda la tabla?ESCANEAR en el atributo clave en DynamoDB

+0

A partir de abril de 2014, puede utilizar IN en consultas https://aws.amazon.com/blogs/aws/improved-queries-and-updates-for-dynamodb/ – emilyk

Respuesta

5

¿Se escaneará el atributo clave para escanear toda la tabla?

Sí, ver Query and Scan in Amazon DynamoDB:

Scan

Una operación de exploración barre toda la tabla. Puede especificar que los filtros se apliquen a los resultados para refinar los valores que se le devuelven, después del escaneo completo . Amazon DynamoDB pone un límite de 1 MB en el escaneo (se aplica el límite antes de filtrar los resultados). Un escaneo puede dar como resultado que los datos de la tabla no cumplan con los criterios de filtro.

En concreto, no hay ninguna diferencia entre la llave y no clave atributos como lo que se refiere la Scan API, es decir, que simplemente proporciona los atributos deseados por nombre, independientemente de que sean utilizados como un atributo que constituye el Primary Key tan bien o no:

AttributesToGet

array de nombres de atributos. Si no se especifican los nombres de los atributos, entonces se devolverán todos los atributos. Si no se encuentran algunos atributos, no aparecerán en el resultado.

+1

Lástima. ¿Cuál sería la diferencia de costo entre el escaneo y la consulta de 100 registros coincidentes en un conjunto de registros de un millón? –

+0

@Mani: Muy probablemente enorme: _SCAN_ simplemente no está diseñado para ser utilizado de esa manera y tiene implicaciones significativas en el costo/rendimiento para grandes conjuntos de registros, si se usa sin tener en cuenta específicamente esto. Calcular esto es bastante complejo y, en consecuencia, leer a través de la primera publicación de blog de Chris Moyer en [Amazon DynamoDB] (http://blog.coredumped.org/2012/01/amazon-dynamodb.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+ChrisMoyer+%28Chris+Moyer%29) para un análisis, por cierto, una muestra para un conjunto de registros de un millón, y pensamientos sobre cómo dar cuenta de este problema a su vez. –

1

¿no funcionaría batchGetItem para usted?

+0

En realidad, la entidad tiene una clave y un atributo de rango. Por lo tanto, es una condición IN y entre atributos clave. Por cierto, ¿cómo se usa batchgetitem con clases pojo? –

+0

@ManiDoraisamy, dado el requisito mejorado, sugeriría emitir una consulta por valor de clave hash en la lista IN. escriba una pequeña aplicación que se una a los resultados de la consulta y se ejecute en Amazon EC2 y deberá aliviar el aumento en la latencia. alternativamente, puede asignar esta última tarea al EMR de Amazon, ya que _Amazon DynamoDB también se integra con Amazon Elastic MapReduce_. – Mikha

+0

@ManiDoraisamy a su segunda pregunta la respuesta es usted no. 'BatchGetItemRequest' se acerca a una lista de hasta 100' Key's. la 'Clave' contiene 'Valor de atributo' tanto para la clave de acceso directo como para la clave de intervalo para identificar con precisión un registro en una tabla. Por cierto, un registro es esencialmente un 'Mapa' y es su responsabilidad convertir sus pojos dentro y fuera de esos. – Mikha

Cuestiones relacionadas