MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Qu'est-ce qu'une bonne structure de document MongoDB pour une interrogation plus efficace des abonnés/suivis des utilisateurs ?

Il s'agit d'un problème classique de suiveur-suivi et il n'y a pas de réponse unique. Consultez ce lien :

conception mongo db des suivis et des flux, où dois-je intégrer ?

En fait cette situation se prête très bien à un schéma relationnel, si MongoDB et SQL Server étaient les seuls choix que vous aviez. Mais il s'agit d'un type particulier de problème relationnel dans lequel vous avez une relation à double sens. Cela peut peut-être être mieux géré par une base de données de graphes :

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

Le fait est que vous pouvez conserver les abonnés ou les abonnés dans un document utilisateur, mais pas les deux, pour éviter les problèmes de double suppression. Donc, si vous devez vous en tenir à MongoDB, une solution pourrait être .. (en supposant que les gens ne suivent / ne suivent personne qui fréquemment),

Conservez uniquement les abonnés dans le document, car lorsque je consulte mon profil, je serais intéressé par les personnes que je suis.. (c'est la raison pour laquelle je les ai suivis en premier lieu, n'est-ce pas ?..Et puis faites une requête comme :

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

Cela indiquera qui tous me suivent (disons que mon identifiant est 'user_id').

Une autre raison pour laquelle je ne suggère pas l'inverse est que.. on peut suivre au maximum 30 à 40 personnes, donc un document utilisateur stockant 30 à 40 abonnés devrait convenir par rapport à un document utilisateur stockant des milliers d'abonnés ! Avec l'approche followee-in-document, vous obtenez des documents utilisateur de taille à peu près égale. Dans l'approche followee-in-document, vous aurez également des documents très petits mais très volumineux. Et en fonction de la quantité de données de suivi que vous mettez (le cas échéant, à l'exception de follower_id), vous pourriez voulez faire attention à la taille limite du document.