Me estoy volviendo loco pensando en una buena estructura de documento para manejar una aplicación de mensaje.Estructura de MongoDB para la aplicación de mensaje
Necesito básicamente tres (o cuatro) tipos de objetos:
- El usuario (nombre de usuario, correo electrónico, contraseña, etc.)
- la lista de contactos (que contiene diferentes contactos o grupos de contactos)
- la conversación (una conversación es una colección de mensajes entre algunas personas)
- el mensaje (contiene el cuerpo del mensaje, alguna marca de tiempo y el creador.)
Mi idea era integrar los contactos en el documento de usuario y de integrar los mensajes en un documento de conversación:
1. El usuario
{
username: 'dev.puS',
usernameCanonical: 'dev.pus', // used for unique constraints
email: '[email protected],
emailCanonical: '[email protected],
salt: 'some hash',
password: 'hash with salt',
logs: { last_login: 12.06.2008, last_password_reset: 04.03.2007 },
state: { online: true, available: false },
contacts: [ user_id1, user_id2, user_id3 ]
}
2. Conversación
{
members: [ user_id1, user_id2 ],
messages: [
{ author: user_2, body: 'Hi what's up' },
{ author: user_1, body: 'Nothing out here :(' },
{ author: user_2, body: 'Whanna ask some question on stackoverflow' },
{ author: user_1, body: 'Okay, lets go' }
]
}
¿Qué piensas de este esquema?
Creo que sería mejor mantenerlos separados (por lo que cada documento es propio) porque cada documento tiene una frecuencia de actualización diferente. Pero realmente no tengo ninguna experiencia al respecto por lo que sería bueno escuchar algunos consejos :)
Saludos
esquema a MongoDB no es “bueno” o “malo” por sí mismo. Debe detallar las consultas y actualizaciones que va a realizar. Solo entonces puede evaluar si un esquema dado se adapta a estos patrones de operación. –
También necesita estimar la distribución del tamaño de los datos, por ejemplo, ¿cuántos mensajes contendrá una conversación, en promedio, como máximo? Esto puede ser importante si desea incrustar. –
De acuerdo, lo tendré en cuenta. ¿Es un enfoque común para la memoria caché, por ejemplo, los mensajes con redis y que los guardan todos en mongo cuando termina la sesión? Estoy un poco inseguro acerca de realizar muchas acciones de escritura en un objeto "no estructurado" –