Supongamos que tiene una gran cantidad de usuarios (M) y una gran cantidad de documentos (N) y desea que cada usuario pueda marcar cada documento como leer o no leer (al igual que cualquier sistema de correo electrónico). ¿Cuál es la mejor manera de representar esto en MongoDB? O cualquier otra base de datos de documentos?MongoDB/NOSQL: mejor enfoque para manejar el estado leído/no leído en los mensajes
Hay varias preguntas sobre stackoverflow hace esta pregunta para bases de datos relacionales, pero no vi ninguna de las recomendaciones de bases de datos documentales:
What's the most efficient way to remember read/unread status across multiple items?
Implementing an efficient system of "unread comments" counters
Normalmente las respuestas implican un cuadro en el todo lo que un usuario ha leído: (es decir, tuplas de identificación de usuario, identificación de documento) con algunas optimizaciones posibles para una fecha de corte que permite que mark-all-as-read limpie la base de datos y comience de nuevo sabiendo que todo lo anterior se lee '.
Así que, expertos en MongoDB/NOSQL, ¿qué enfoques han visto en la práctica sobre este problema y cómo se han desempeñado?
Gracias, por lo que su recomendación es esencialmente el mismo tipo de tabla 'tuple/join' que el caso relacional, ¿no? ¿Alguna razón en particular para almacenar los mensajes y las preferencias en la misma colección? –
Lo que sucede con MongoDB es que, por lo general, cuanto más plano pueda hacer su objeto, mejor. Si bien puede almacenar estructuras anidadas, no es lo mejor para consultar o entrar en esas estructuras para luego alterarlas. Así que muchas cosas pueden terminar pareciéndose a una relación, pero con menos abstracción debido a que no se usan tablas. Además, realmente no hay ninguna razón por la que los almacene en la misma colección, aparte de que no les gusta tener colecciones de millones de dólares. Si planea tener millones de mensajes, podría ser conveniente usar diferentes colecciones para que pueda configurar los índices para que se ajusten mejor a cada objeto. – Klinky