Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

147
Vistas
Buena estructura de datos para almacenar la colección de elementos para la consulta más eficiente DynamoDB

Recientemente me encontré con un problema en el que tenía que almacenar una colección de datos dentro de un atributo. Hay una tabla de restaurantDB. La tabla tiene un atributo (no obligatorio) llamado "grupos" que gestiona los grupos creados por el restaurante. Estos grupos tienen varios permisos asociados a ellos. Una forma natural de pensar es que el atributo de grupos puede ser del tipo lista que almacena un mapa (pares clave-valor) de los datos como nombre_grupo, id_grupo y permiso (que es una lista de todos los permisos)

 table:{ //other fields id: groups: L: M: {group_name:S,group_id:S,permission:L :S} }

p.ej

 "groups": [{ "name": "OWNER", "permission": ["READ", "WRITE"] }, { "name": "MANAGER", "permission": ["READ"], } ],

Esto funciona bien para la creación y adición de un número arbitrario de usuarios mediante la actualización de dynamoDB aws-sdk con update UpdateExpression: 'SET #groups:=list_append(#groups,:newgroup)'

sin embargo, si tengo que hacer una solicitud de parche para modificar un permiso para un grupo, digamos, MANAGER , ¿Cómo puedo recuperar el objeto Mapa dentro de la lista con la clave group_name : "MANAGER" sin obtener toda la matriz de Grupos?

No quiero parchearlo obteniendo la lista completa porque primero tendré que query para obtener el atributo de grupos, luego tendré que recorrer toda la matriz para encontrar group_name:"MANAGER" . Una vez que lo consiga, modificaré la matriz y luego volveré a colocar la lista completa con una update .

Se garantiza que los nombres de los grupos sean únicos (sin embargo, el cliente también quiere un group_id único), así que pensé en una estructura de datos como

 table:{ //other fields id: groups: M:{S:L} }

p.ej

 "groups":{ "OWNER":["READ","WRITE"], "MANAGER":["READ"] }

Aunque ahora no puedo ingresar una cantidad arbitraria de datos para crear un nuevo grupo (como en la solicitud POST), pero puedo hacerlo uno a la vez. También la solicitud PATCH ahora funciona bien como

 UpdateExpression: "set #groups.#groupName = :newPermission", ExpressionAttributeNames: { "#groups": "groups", "#groupName": `${groupName}`, //groupName taken from request Body }, ExpressionAttributeValues: { ":newPermission": permission, //permission taken from request body },

Quería saber si había una mejor manera de recuperar tipos de lista. La documentación syas podemos recuperar elementos de la lista con índices, sin embargo, no conozco el índice de antemano.

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda