Implementación y Consulta de Una Tabla de Dynamo
Implementación y Consulta de Una Tabla de Dynamo
Implementación y Consulta de Una Tabla de Dynamo
DynamoDB
Ahora que hemos aprendido sobre DynamoDB y sus características, vamos a
implementar nuestra propia tabla de DynamoDB para practicar el uso de la
consola y la API. Usaremos la tabla GameScores para construir una base de
datos de clasificación simple. Usaremos tanto la consola como la CLI de AWS
para estos pasos.
Ahora hemos creado nuestra tabla llamada GameScores y estamos listos para
agregar algunos elementos.
Agregar elementos
Esto abre una página que permite ejecutar consultas en la tabla de DynamoDB,
pero primero debemos agregar algunos elementos. Haga clic en Crear
elemento como se muestra en la siguiente captura de pantalla:
--table-name GameScores \
:gamename"\
--expression-attribute-values '{
}'
Tenga en cuenta que solo podemos consultar elementos que son parte de la
clave, pero podemos filtrar por otros atributos si se devuelven en el conjunto de
datos original. Entonces, por ejemplo, podemos agregar un filtro adicional para
obtener solo los puntajes mayores a 1,000:
--table-name GameScores \
:gamename"\
--expression-attribute-values '{
}'
Queremos conocer a todos los jugadores. quien obtuvo más de 100, pero como
el atributo HighScore no es parte de la clave, no podemos obtenerlo a través de
una consulta, por lo que necesitamos usar un escaneo. Recuerde que los
escaneos implican verificar cada elemento de la tabla, por lo que puede ser lento
y costoso.y debe evitarse si es posible:
--table-name GameScores \
--expression-attribute-values '{":score":{"N":"1000"}}'
Una mejor manera de hacer este tipo de consulta sería agregar un GSI y usarlo
en lugar de confiar en un escaneo. Hagamos eso ahora.
En la sección anterior, teníamos que usar un escaneo para obtener los datos que
queríamos ya que HighScore no era parte de nuestra clave. Si agregamos un
nuevo GSI a la tabla, podemos convertirlo en una clave.
Primero, piense en cómo queremos que se devuelvan los datos. Como estamos
almacenando datos para varios juegos, es poco probable que queramos que
nuestra consulta arroje todos los puntajes, sino los puntajes de un juego
específico, por lo que debemos crear un GSI con la clave de
partición GameName y HighScore como la clave de ordenación.
El beneficio de hacer esto es que las puntuaciones se almacenan ordenadas,
por lo que si queremos obtener una instancia de HighScore, simplemente
podemos obtener la primera clave:
--table-name GameScore \
--attribute-definitions '[
{AttributeName=GameName,AttributeType=S},
{AttributeName=HighScore,AttributeType=N}
]'\
--global-secondary-index-updates '[
{"AttributeName":"GameName","KeyType":"HASH"},":{"AttributeName":"Hi
ghScore","KeyType":"RANGE"}],
"Projection":{"ProjectionType":"ALL"}}
]'
Ahora que tenemos el nuevo índice, podemos ejecutar una consulta para obtener
la puntuación más alta para nuestro juego; a diferencia del caso con un SQLbase
de datos, necesitamos decirle específicamente a DynamoDB qué índice
usar. Recuerde que el atributo HighScore está ordenado, por lo que solo
podemos obtener el primer valor devuelto usando la no-scan-index-
forwardconfiguración para invertir el orden:
aws dynamodb query \
--table-name GameScores \
--index-name GameTitleScores
--expression-attribute-values '{
--no-scan-index-forward
--max-items 1
}'