sql >> Base de Datos >  >> NoSQL >> MongoDB

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

Este es un problema clásico de seguidor-seguidor y no hay una respuesta. Consulte este enlace:

mongo db diseño de seguimiento y feeds, ¿dónde debo insertar?

En realidad, esta situación se presta muy bien a un esquema relacional, si MongoDB y el servidor SQL fueran las únicas opciones que tuviera. Pero este es un tipo especial de problema relacional en el que tienes una relación bidireccional. Quizás esto se pueda manejar mejor con una base de datos de gráficos:

http://forum.kohanaframework.org/discussion/10130/followers-and-following-database-design-like-twitter/p1

La cuestión es que puede mantener seguidores o seguidores en un documento de usuario, pero no ambos, para evitar problemas de eliminación doble. Entonces, si debe apegarse a MongoDB, una salida podría ser... (asumiendo que las personas no siguen/dejan de seguir a nadie eso frecuencia),

Mantener solo a los seguidores en el documento, porque cuando veo mi perfil, me interesan las personas a las que sigo... (esa es la razón por la que los seguí en primer lugar, ¿verdad?)..Y luego haz una consulta como:

db.Users.find({ user_id : { $in : followees })

Esto dirá quiénes me siguen (digamos que mi ID es 'user_id').

Otra razón por la que no sugiero lo contrario es que... uno puede seguir como máximo a 30-40 personas, por lo que el documento de usuario que almacena 30-40 seguidores debería estar bien en comparación con un documento de usuario que almacena miles de seguidores. Con el enfoque de seguidor en el documento, obtiene documentos de usuario de tamaño aproximadamente uniforme en todo el documento. En el enfoque de seguidor en el documento, tendrá algunos documentos muy pequeños pero también muy voluminosos. Y dependiendo de la cantidad de datos de seguidores que ingrese (si los hay, además de follower_id), podría quiero tener cuidado con el límite de tamaño del documento.