amazon dynamodb - que - ¿Cuál es la diferencia entre escaneo y consulta en dynamodb? ¿Cuándo usar escaneo/consulta?
mongodb español (3)
Una operación de consulta como se especifica en la documentación de DynamoDb:
Una operación de consulta solo busca valores de atributo de clave principal y admite un subconjunto de operadores de comparación en valores de atributo clave para refinar el proceso de búsqueda.
y la operación de escaneo:
Una operación de escaneo escanea toda la tabla. Puede especificar filtros para aplicar a los resultados para refinar los valores que se le devuelven, después de la exploración completa.
Cuál es mejor basado en consideraciones de rendimiento y costo.
Al crear una tabla de Dynamodb, seleccione Claves primarias e Índices secundarios locales (LSI) para que una operación de consulta devuelva los elementos que desea.
Las operaciones de consulta solo admiten una evaluación de operador igual de la clave principal, pero condicional (=, <, <=,>,> =, Entre, Comenzar) en la clave de clasificación.
Las operaciones de escaneo son generalmente más lentas y más caras, ya que la operación debe recorrer cada elemento de su tabla para obtener los elementos que solicita.
Ejemplo:
Table: CustomerId, AccountType, Country, LastPurchase
Primary Key: CustomerId + AccountType
En este ejemplo, puede utilizar una operación de consulta para obtener:
- Un CustomerId con un filtro condicional en AccountType
Una operación de escaneo debería usarse para devolver:
- Todos los clientes con un tipo de cuenta específico
- Artículos basados en filtros condicionales por país, es decir, todos los clientes de EE.
- Artículos basados en filtros condicionales por LastPurchase, es decir, todos los clientes que hicieron una compra en el último mes
Para evitar operaciones de escaneo en operaciones de uso frecuente, cree un índice secundario local (LSI) o un índice secundario global (GSI).
Ejemplo:
Table: CustomerId, AccountType, Country, LastPurchase
Primary Key: CustomerId + AccountType
GSI: AccountType + CustomerId
LSI: CustomerId + LastPurchase
En este ejemplo, una operación de consulta puede permitirle obtener:
- Un CustomerId con un filtro condicional en AccountType
- [GSI] Un filtro condicional en CustomerIds para un tipo de cuenta específico
- [LSI] Un CustomerId con un filtro condicional en LastPurchase
En términos de rendimiento, creo que es una buena práctica diseñar su tabla para que las aplicaciones utilicen Query
lugar de Scan
. Debido a que una operación de escaneo siempre escanea la tabla completa antes de filtrar los valores deseados, lo que significa que se necesita más tiempo y espacio para procesar las operaciones de datos, como leer, escribir y eliminar. Para más información, consultar el documento oficial.
Tiene una clave de partición / clave de partición de la tabla dynamodb como customer_country
. Si utiliza la consulta, customer_country
es el campo obligatorio para realizar la operación de consulta. Todos los filtros se pueden hacer solo artículos que pertenecen a customer_country
.
Si realiza una exploración de tabla, el filtro se realizará en todas las claves de partición / clave principal. Primero se recuperaron todos los datos y se aplicó el filtro después de obtener de la tabla.
p.ej:
aquí customer_country
es la clave de partición / clave principal y la id
es la clave de clasificación
-----------------------------------
customer_country | name | id
-----------------------------------
VV | Tom | 1
VV | Jack | 2
VV | Mary | 4
BB | Nancy | 5
BB | Lom | 6
BB | XX | 7
CC | YY | 8
CC | ZZ | 9
------------------------------------
Si realiza una operación de consulta, se aplica solo en
customer_country
valor decustomer_country
. El valor solo debe ser igual operador (=).Así que solo se recuperan los elementos iguales a ese valor de clave de partición / clave principal.
Si realiza una operación de escaneo, recupera todos los elementos en esa tabla y filtra los datos después de tomar esos datos.
Nota: No realice una operación de escaneo que exceda su RCU.