Vous devez utiliser des documents incorporés s'il s'agit de documents statiques ou qui ne dépassent pas quelques centaines en raison de l'impact sur les performances. J'ai parlé de ce problème il y a un moment. Récemment, Asya Kamsky qui travaille comme architecte de solutions pour MongoDB avait écrit un article sur «l'utilisation de sous-documents».
J'espère que cela aidera à qui recherche des solutions ou les meilleures pratiques.
Tout d'abord, nous devons réfléchir aux raisons pour lesquelles nous voudrions faire une telle chose. Normalement, je conseillerais aux gens d'intégrer des choses qu'ils veulent toujours récupérer lorsqu'ils récupèrent ce document. Le revers de la médaille est que vous ne souhaitez pas incorporer dans le document des éléments que vous ne souhaitez pas récupérer.
Si vous intégrez l'activité que j'exécute dans le document, cela fonctionnera très bien au début car toute mon activité est là et avec une seule lecture, vous pouvez récupérer tout ce que vous voudrez peut-être me montrer: "vous avez récemment cliqué dessus et ici sont vos deux derniers commentaires "mais que se passe-t-il après six mois et je me fiche de ce que j'ai fait il y a longtemps et vous ne voulez pas me les montrer à moins que je ne cherche spécifiquement une vieille activité?
Tout d'abord, vous finirez par renvoyer un document de plus en plus gros et en vous souciant d'une partie de plus en plus petite. Mais vous pouvez utiliser la projection pour ne renvoyer qu'une partie du tableau, le vrai problème est que le document sur le disque s'agrandira et qu'il sera toujours lu même si vous n'en restituerez qu'une partie à l'utilisateur final, mais puisque mon activité ne s'arrêtera pas tant que je serai actif, le document continuera de grandir et de grandir.
Le problème le plus évident avec cela est finalement que vous atteindrez la limite de 16 Mo de documents, mais ce n'est pas du tout ce qui devrait vous inquiéter. Un document qui ne cesse de croître entraînera des coûts de plus en plus élevés chaque fois qu'il devra être déplacé sur le disque, et même si vous prenez des mesures pour atténuer les effets de la fragmentation, vos écritures seront globalement inutilement longues, ce qui aura un impact sur les performances globales de l'ensemble de votre application.
Il y a une autre chose que vous pouvez faire qui va complètement tuer les performances de votre application et c'est d'indexer ce tableau toujours croissant. Cela signifie que chaque fois que le document avec ce tableau est déplacé, le nombre d'entrées d'index qui doivent être mis à jour est directement proportionnel au nombre de valeurs indexées dans ce document, et plus le tableau est grand, plus ce nombre sera élevé. être.
Je ne veux pas que cela vous effraie d'utiliser des tableaux lorsqu'ils conviennent bien au modèle de données - ils sont une fonctionnalité puissante du modèle de données de la base de données de documents, mais comme tous les outils puissants, il doit être utilisé dans les bonnes circonstances et il doit être utilisé avec précaution.