Les documents qui grossissent considérablement avec le temps peuvent être des bombes à retardement. La bande passante du réseau et l'utilisation de la RAM deviendront probablement des goulots d'étranglement mesurables, vous obligeant à recommencer.
Tout d'abord, considérons deux collections: Client et Paiement. Ainsi, le grain est assez petit: un document par paiement.
Ensuite, vous devez décider comment modéliser les informations de compte, telles que les cartes de crédit. Examinons si les documents client contiennent des tableaux d'informations sur les comptes ou si vous avez besoin d'une nouvelle collection de comptes.
Si les documents de compte sont séparés des documents client, le chargement de tous les comptes d'un client en mémoire nécessite la récupération de plusieurs documents. Cela pourrait se traduire par une mémoire supplémentaire, des E / S, de la bande passante et une utilisation du processeur. Cela signifie-t-il immédiatement que la collecte de comptes est une mauvaise idée?
Votre décision affecte les documents de paiement. Si les informations de compte sont intégrées dans un document client, comment les référeriez-vous? Les documents de compte séparés ont leur propre attribut _id. Avec les informations de compte intégrées, votre application générerait de nouveaux identifiants pour les comptes ou utiliserait les attributs du compte (par exemple, le numéro de compte) pour la clé.
Un document de paiement pourrait-il contenir tous les paiements effectués dans un délai fixe (par exemple, un jour?). Une telle complexité affectera tout le code qui lit et écrit les documents de paiement. L'optimisation prématurée peut être mortelle pour les projets.
Comme les documents de compte, les paiements sont facilement référencés tant qu'un document de paiement ne contient qu'un seul paiement. Un nouveau type de document, crédit par exemple, pourrait référencer un paiement. Mais voudriez-vous créer une collection de crédit ou intégreriez-vous des informations de crédit à l'intérieur des informations de paiement? Que se passerait-il si vous deviez plus tard référencer un crédit?
Pour résumer, j'ai réussi avec beaucoup de petits documents et de nombreuses collections. J'implémente des références avec _id et uniquement avec _id. Ainsi, je ne crains pas que des documents de plus en plus nombreux détruisent mon application. Le schéma est facile à comprendre et à indexer car chaque entité possède sa propre collection. Les entités importantes ne se cachent pas dans d'autres documents.
J'aimerais connaître vos découvertes. Bonne chance!