2010-09-29 11 views
2

Par défaut, MongoDB crée un index sur la clé _id du document. Mais quand j'assure un index supplémentaire (secondaire comme dans InnoDB de MySQL?) Et que je l'interroge après, le moteur l'analyse et ensuite scanne l'index _id pour obtenir des offsets de documentation.Comment MongoDB gère les balayages d'index secondaires?

Je suis confus parce que quand sharding vient il que j'ai juste chaque morceau ont ses propres index et il y aura beaucoup de lectures aléatoires par requête?

Répondre

7

Chaque fragment aura son propre index (contenant uniquement les documents de ce fragment), ils seront accédés en parallèle (chaque fragment lit son propre fragment d'index local) et les résultats seront fusionnés. Ce ne sont pas des lectures aléatoires, mais plusieurs lectures d'index parallèles. Du point de vue d'un seul fragment, cela ressemble à un accès à un index normal. Cette fragmentation d'index est également la raison pour laquelle les index secondaires ne peuvent pas être uniques dans un environnement de sharding (il n'y a pas d'index global unique qui pourrait assurer l'unicité).

+0

Le fragment est constitué de blocs, ce qui signifie que chaque bloc aura ses propres index et que l'index de partition parallèle utilisera des index de blocs parallèles? – jlmfao

+0

@inquisitor: Je ne sais pas. Avoir les index de tous les morceaux sur le même fragment intégré dans un seul index semble avoir plus de sens. Mais vous devriez demander cela sur la liste de diffusion MongoDB (et ensuite rapporter ici). – Thilo

+0

comme vous le dites, tous les morceaux sur le même fragment partagent la même structure d'index (confirmé par la liste de diffusion). – jlmfao