¿Cuál es una buena estructura de documento de MongoDB para la consulta más eficiente de los usuarios seguidores / seguidores?

Me he estado preguntando acerca de la estructura ideal del documento para la máxima eficiencia de consulta para diversas situaciones y hay una sobre la que quiero preguntar. Realmente es algo que no se sabe a ciencia cierta cómo se comporta MongoDB en la memoria en este tipo específico de caso. Déjame darte un escenario hipotético.

Imagina un sistema estilo Twitter de seguidores y seguidores. Después de una mirada superficialmente admitida, las principales opciones parecen ser:

En cada documento de usuario, una matriz de "seguidores" que contiene referencias a todos los documentos de otros usuarios que siguen. Los seguidores se encuentran al encontrar a nuestro usuario actual en la matriz "user.followers" de otros usuarios. El principal inconveniente parece ser la sobrecarga de consultas potenciales de la búsqueda de Followee. Además, para una consulta específicamente para el contenido de "user.followers", ¿MongoDB simplemente accede al campo requerido en los documentos de los usuarios, o se encuentra el documento completo del usuario y luego se buscan los valores de los campos requeridos desde allí y se almacena en caché? almacenado de tal manera que una consulta sobre una gran base de usuarios requeriría significativamente más memoria?

En cada documento de usuario, almacene tanto "seguidores" como "seguidores" para un acceso más rápido a cada uno. Obviamente, esto tiene la desventaja de los datos duplicados en el sentido de que existe una entrada para el usuario A que sigue al usuario B en ambos documentos de usuario en el campo respectivo, y su eliminación requiere una eliminación correspondiente en el otro. Técnicamente, esto podría estar considerando duplicar el número de puntos de falla potencial para una eliminación simple. ¿Y sigue sufriendo MongoDB lo que he escuchado que se describe como "queso suizo" de los datos almacenados en la memoria cuando se producen eliminaciones, y por lo tanto, la eliminación de los 2 campos en lugar de 1 duplica el efecto de ese problema de memoria?

Una colección separada para almacenar los Seguidores de los usuarios, consultada de manera similar a los documentos del usuario en 1- excepto que obviamente los únicos datos a los que se accede son los Seguidores, por lo que si los documentos del usuario contienen muchos otros datos relevantes para cada usuario, evitamos accediendo a esos datos. Sin embargo, parece que esto tiene algo de una base de datos relacional, y aunque sé que no siempre es un enfoque terrible solo por principio, obviamente si uno de los otros enfoques mencionados (o uno que no he considerado) es mejor bajo la arquitectura de Mongo. ¡Me encantaría aprender!

Si alguien tiene alguna idea sobre esto, o quiere decirme que me he perdido una página de documentos muy relevante y obvia en algún lugar, o incluso quiere decirme que simplemente estoy siendo estúpido (pensamiento con una explicación de por qué, por favor; )) ¡Me encantaría saber de ti!

Respuestas a la pregunta(2)

Su respuesta a la pregunta