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

Où dois-je placer la chronologie des activités dans mongodb, intégrée à l'utilisateur ou séparément ?

Ces deux articles sont corrects et les deux sont faux.

Intégrer ou ne pas intégrer ? C'est toujours la question clé et cela dépend de vos besoins, de vos requêtes et de votre stockage et même de votre ensemble de travail.

En fin de compte, nous ne pouvons donner que des indications dont vous ne pouvez pas réellement vous dire lequel est le meilleur.

Cependant, compte tenu de la taille d'un flux d'activités, je ne l'intégrerais personnellement pas car il pourrait facilement dépasser 16 Mo (par utilisateur), mais pour la vitesse et la puissance de l'interrogation, vous pouvez agréger, par exemple, les 20 dernières activités d'un utilisateur, puis intégrer cela dans la ligne des utilisateurs (puisque les 20 derniers sont normalement ce qui est le plus interrogé).

Mais ensuite, l'intégration d'un agrégat dépend, le sharding peut prendre en charge l'interrogation d'énormes collections à l'échelle horizontale et l'utilisation des bonnes requêtes signifie que vous ne tirez aucun avantage réel de l'intégration et pourrait potentiellement vous rendre la vie plus difficile en devant maintenir les index, le stockage et requêtes nécessaires pour maintenir ce sous-document.

Quant à l'encastrement jusqu'à la mort. De nombreuses requêtes MongoDB en ce moment reposent principalement sur l'intégration à un ou deux niveaux, c'est pourquoi il peut être difficile de maintenir, par exemple, 12 tables imbriquées, moment auquel vous commencez à voir des questions ici et le groupe Google sur la façon de maintenir un tel un énorme document (la réponse est côté client si vous le voulez vraiment).

Compte tenu de cela, j'hébergerais un agrégat sur l'utilisateur, ce qui signifie que l'utilisateur peut voir sa propre activité ou celle d'autres utilisateurs singulièrement avec un aller-retour.

Cependant, étant donné qu'un enseignant devrait très probablement avoir des résultats de pages de tous les utilisateurs, j'hébergerais une collection d'activités distincte et une requête à ce sujet pour eux. La pagination d'un ensemble de sous-documents nécessite quelques requêtes et dans ce cas, il serait préférable de procéder ainsi.

J'espère que cela devrait vous aider à démarrer.