es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mejor patrón de diseño para modelar una tabla de puntuaciones en DynamoDB.

Estoy tratando de llevar un registro de las personas en una habitación. Actualmente, las personas pueden unirse y abandonar las habitaciones (relación muchos-muchos). Actualmente lo estoy modelando como un intercambio de PK/SK de doble vía roomId <-> userId a través de un GSI. Así puedo buscar quién está en una habitación y en qué habitación se encuentra un usuario.

Sin embargo, también me gustaría conocer las N habitaciones principales por población. Para esto, podría incrementar un recuento por habitación cuando un usuario ingrese, y decrementar cuando salga de ella (digamos en otra tabla), pero luego tendría que hacer una escritura extra. Siento que también podría haber problemas para mantenerlo sincronizado, y tal vez los streams de DynamoDB puedan manejar el problema de sincronización.

¿Ideas sobre un enfoque mejor?

por ejemplo:

PK SK
user1 room1
user1 room2
user2 room2
user3 room2

topRooms(n) = {room1: 1, habitación2: 3}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución sería utilizar los flujos de DynamoDB para monitorear la tabla roomId <-> userId en busca de cambios y actualizar una tabla separada que mantenga el conteo de la población de la sala. De esta manera, no necesitaría realizar una escritura adicional y los conteos se mantendrían sincronizados.

    La tabla separada podría tener la roomId como clave de partición y un atributo de conteo que se incrementaría o disminuiría en función de los eventos del flujo. Luego, puede utilizar una consulta para recuperar las mejores N salas ordenando en el atributo de conteo y limitando los resultados a N.

    Alternativamente, podría considerar utilizar una base de datos NoSQL que no sea DynamoDB y que tenga soporte incorporado para agregaciones, como MongoDB o Cassandra. Estas bases de datos le permiten ejecutar consultas de agregación directamente en los datos sin necesidad de mantener una tabla de conteo separada. Sin embargo, si ya está invirtiendo en el uso de DynamoDB o tiene razones específicas para usarlo, la solución de flujos de DynamoDB debería funcionar bien.

Comments are closed.