Il semble que le partage de base de données soit génial si j'ai d'énormes collections. Et si j'ai beaucoup de collections de taille assez importante? Disons que pour 1 collection de 100 000 000 documents (pas de gros commentaires) le sharding est efficace. Est-il également efficace pour 10 000 collections de 10 000 documents chacune?
(Je pense que cette question est toujours valable pour les bases de données orientées table si vous remplacez les collections par des tables et des documents avec des lignes. Si possible, je voudrais connaître la réponse théorique ainsi que la réponse dans le scénario MongoDB spécifique, si différent de la théorie réponse.)
foo
etbar
avec la même structure de données, vous pouvez les fusionner dans labaz
collection et remplacer le_ids
(en code):{ _id: "foo123" }, { _id: "bar123" }
. Vous avez un index plus grand, mais vous n'avez qu'un seul index qui inclut le type. Pas une exigence, juste "matière à réflexion".Le partitionnement MongoDB fonctionne en divisant une collection en petits «morceaux» et en les répartissant uniformément sur un certain nombre de machines. La taille de bloc par défaut, qui est généralement la plus efficace, est de 200 Mo. Donc, à moins qu'une collection ne dépasse beaucoup 200 Mo, elle ne se divisera pas en morceaux et ne sera donc pas éligible au partage, il n'y aura donc aucun avantage.
Dans le cas général, le partage de données sur plusieurs machines est un moyen très efficace de mettre à l'échelle les lectures, les écritures et les requêtes. Vous bénéficiez des avantages de plusieurs processeurs, disques durs et stockage en mémoire, fonctionnant en parallèle pour lire, écrire et traiter des données. La mise à l'échelle de la mémoire est particulièrement importante pour MongoDB, où les hautes performances sont très sensibles à l'ajustement des données en mémoire.
la source