Le partage est-il efficace pour les petites collections?

11

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.)

João Pinto Jerónimo
la source

Réponses:

5

Est-il également efficace pour 10 000 collections de 10 000 documents chacune?

La plupart des gens ont le problème de la "grande collection unique" et le partage est donc clairement utile pour réduire les maux de tête liés à l'équilibrage de ces données.

Cependant, lorsque vous avez 10 000 petites collections, votre mal de tête n'est probablement pas «d'équilibrer les données». Avec autant de petites collections, votre problème est probablement lié au suivi de ces collections. En fonction de la taille de votre document, il est possible que vous ne dépassiez même pas la limite inférieure de partage effectif.

Pour les très petites collections, vous pouvez utiliser la commande movePrimary peu connue pour gérer l'emplacement de vos données.

Bien sûr, l'autre façon de voir les choses est pourquoi avez-vous des collections 10k? Une collection n'a pas besoin d'objets homogènes et avec 10k collections la plupart doivent être générées. Il est tout à fait possible de stocker différents "types" de données dans la même collection, de réduire le nombre de collections, puis d'inclure le type dans la clé de partition.

Gates VP
la source
Merci, j'essayais exactement de savoir si le mieux que je pouvais faire était de me débarrasser de ces tonnes de collections et d'en faire une grande. J'avais des tonnes de collections auparavant parce que j'avais entendu une croyance commune: "Les énormes collections sont mauvaises pour vous car les index ne tiennent pas dans la RAM et il sera très lent de les interroger et de les mettre à jour". Mais je suppose que le sharding a été créé pour résoudre ce problème ... Merci !!
João Pinto Jerónimo
Honnêtement, je trouve que vous pouvez aussi souvent "tricher" sur les index. Si vous avez deux collections fooet baravec la même structure de données, vous pouvez les fusionner dans la bazcollection 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".
Gates VP
4

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.

Chris Fulstow
la source
La taille de bloc par défaut de FYI est de 64 Mo à partir de 1,8.
Gates VP