Ejemplos de consulta en DynamoDB

Ejemplos de consulta en DynamoDB

DynamoDB es un servicio de base de datos NoSQL rápido, escalable y flexible ofrecido por Amazon Web Services (AWS). Posee la habilidad de almacenar y recuperar cualquier cantidad de datos y servir cualquier nivel de tráfico de aplicaciones. En este artículo, se presentarán ejemplos de consultas para que los desarrolladores puedan entender cómo utilizar DynamoDB de manera efectiva.

📋 Aquí podrás encontrar✍
  1. Consultas básicas
    1. Obtener un elemento específico
    2. Obtener varios elementos
  2. Consultas avanzadas
    1. Ordenar elementos
    2. Filtrar elementos
  3. Ejemplos básicos y avanzados
    1. Ejemplo básico
    2. Ejemplo avanzado
  4. Conclusión
  5. Preguntas frecuentes
    1. ¿Se pueden realizar consultas a DynamoDB de manera síncrona?
    2. ¿Debo crear uno o más índices en mi tabla?
    3. ¿Es posible combinar múltiples métodos de consulta avanzados?
    4. ¿Pueden las operaciones de consulta ser condicionales?

Consultas básicas

En DynamoDB, las consultas para recuperar los elementos de una tabla pueden ser sencillas o complejas. A continuación se presentan algunos ejemplos de consultas básicas:

Obtener un elemento específico

Para obtener un elemento de una tabla, es necesario especificar la clave de partición y la clave de ordenación. Por ejemplo, si se desea encontrar una entrada con clave de partición 'Id' y clave de ordenación 'Name', se puede utilizar la siguiente consulta:

dynamodb.getItem({TableName: 'ejemplo', Key:{Id: {S: '001'}, Name: {S: 'John'}}}, (err, data) => {...});

El método getItem() encuentra un elemento en base a su clave primaria. La función anónima que se pasa como segundo parámetro al método permite manejar el resultado o el error.

Obtener varios elementos

Para recuperar varios elementos con el mismo valor de clave de partición, se puede utilizar el método query(). Por ejemplo:

dynamodb.query({TableName: 'ejemplo', KeyConditionExpression: 'Id = :id', ExpressionAttributeValues: {':id': {S: '001'}}}, (err, data) => {...});

En este caso, la consulta busca los elementos que tengan como clave de partición un valor igual a '001'. El método query() regresa un conjunto de resultados con coincidencias a la consulta.

Consultas avanzadas

Las consultas avanzadas permiten recuperar información específica de manera más eficiente que utilizando la lógica de dominio de bases de datos relacionales. A continuación se presentan algunos ejemplos de consultas avanzadas:

Ordenar elementos

Para recuperar elementos en base a un orden específico, se puede utilizar el operador Index Forward Lookup. Por ejemplo:

dynamodb.query({TableName: 'ejemplo', IndexName: 'LastName-index', KeyConditionExpression: 'LastName = :name', ScanIndexForward: false, ExpressionAttributeValues: {':name': {S: 'Smith'}}}, (err, data) => {...})

En este caso, los elementos que satisfagan la condición de tener LastName igual a 'Smith' y el índice 'LastName-index' serán regresados en orden inverso. Para esto se utiliza ScanIndexForward igual a false.

Filtrar elementos

Para obtener elementos que satisfagan ciertos criterios específicos, se puede filtrar un conjunto de resultados obtenidos a través de una operación de consulta. Por ejemplo:

dynamodb.query({TableName: 'ejemplo', KeyConditionExpression: 'Id = :id', ExpressionAttributeValues: {':id': {S: '001'}}, FilterExpression: 'LastName = :name', ExpressionAttributeValues: {':name': {S: 'Smith'}}}, (err, data) => {...})

En este caso, la consulta original busca todos los elementos con Id igual a '001'. Sin embargo, para filtrar solo aquellos con LastName igual a 'Smith', se agrega un segundo ExpressionAttributeValues y se utiliza en FilterExpression.

Ejemplos básicos y avanzados

A continuación, se presentan algunos ejemplos básicos y avanzados que utilizan los métodos query() y getItem():

Ejemplo básico

  • Paso 1: Obtener los datos de un elemento en una tabla concreta.
  • Paso 2: Utilizar una función anónima para manejar el resultado o el error.

dynamodb.getItem({TableName: 'Movies', Key:{'year':{N:'2015'}, 'title':{S:'The Big New Movie'}}}, (err, data) => {console.log(data)});

Ejemplo avanzado

  • Paso 1: Obtener los elementos de una tabla concreta que tengan un atributo particular.
  • Paso 2: Utilizar una función anónima para manejar el resultado o el error.

dynamodb.query({TableName: 'Movies', ProjectionExpression: '#yr, title, info.rating', KeyConditionExpression: '#yr = :yyyy and title between :letter1 and :letter2', ExpressionAttributeNames: {'#yr': 'year'}, ExpressionAttributeValues: {':yyyy': {N:'2015'}, ':letter1': {S:'A'}, ':letter2': {S:'L'} }}, (err, data) => {console.log(data)});

Conclusión

En este artículo se han presentado ejemplos de consultas básicas y avanzadas para DynamoDB que pueden ayudar a los desarrolladores a entender su uso y aprovechar sus funcionalidades. Recomendamos a los desarrolladores que experimenten y exploren más de las capacidades de DynamoDB.

Preguntas frecuentes

¿Se pueden realizar consultas a DynamoDB de manera síncrona?

No. DynamoDB es un servicio completamente asíncrono, por lo que todas las operaciones se llevan a cabo de manera asíncrona. Sin embargo, se puede utilizar la promesa de AWS SDK para Node.js para crear una capa de abstracción y hacer que su uso parezca sincrónico.

¿Debo crear uno o más índices en mi tabla?

Depende de lo que se esté buscando. Por ejemplo, si se necesita recuperar elementos en base a un campo específico de manera eficiente, es recomendable crear un índice. Si se utilizan índices, es necesario tomar en cuenta su costo y cómo afectarán la capacidad de su tabla.

¿Es posible combinar múltiples métodos de consulta avanzados?

Sí. DynamoDB permite encadenar múltiples métodos avanzados de consulta, creando una consulta aún más específica para los datos que se necesitan.

¿Pueden las operaciones de consulta ser condicionales?

Sí. Las operaciones de consulta pueden ser condicionales y la condición puede abarcar cualquier atributo en la tabla.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir