sql >> Database >  >> NoSQL >> MongoDB

Waarom en wanneer is het nodig om indexen in MongoDB opnieuw op te bouwen?

Volgens de MongoDB-documentatie is het over het algemeen niet nodig om indexen routinematig opnieuw op te bouwen.

OPMERKING :Elk advies over opslag wordt interessanter met MongoDB 3.0+, dat een pluggable storage engine API . Mijn opmerkingen hieronder hebben specifiek betrekking op de standaard MMAP-opslagengine in MongoDB 3.0 en eerder. WiredTiger en andere opslagengines hebben verschillende opslagimplementaties voor gegevens en indexen.

Er kan enig voordeel zijn bij het opnieuw opbouwen van een index met de MMAP-opslagengine als:

  • Een index verbruikt een grotere hoeveelheid ruimte dan verwacht in vergelijking met de gegevens. Opmerking:u moet historische gegevens en indexgrootte in de gaten houden om een ​​vergelijkingsbasis te hebben.

  • U wilt migreren van een oudere indexindeling naar een nieuwere. Als een herindexering wenselijk is, wordt dit vermeld in de upgrade-opmerkingen. MongoDB 2.0 introduceerde bijvoorbeeld significante index prestatieverbeteringen dus de release-opmerkingen bevatten een voorgestelde herindexering naar het v2.0-formaat na het upgraden. Op dezelfde manier introduceerde MongoDB 2.6 2dsphere (v2.0) indexen die een ander standaardgedrag hebben (standaard schaars). Bestaande indexen worden niet opnieuw opgebouwd na upgrades van de indexversie; de keuze of/wanneer wordt geüpgraded wordt overgelaten aan de databasebeheerder.

  • Je hebt de _id . gewijzigd formaat voor een verzameling van of naar een monotoon toenemende sleutel (bijv. ObjectID) naar een willekeurige waarde. Dit is een beetje esoterisch, maar er is een indexoptimalisatie die b-tree buckets 90/10 splitst (in plaats van 50/50) als u _id invoegt s die altijd toenemen (ref:SERVER-983 ). Als de aard van uw _id s aanzienlijk verandert, kan het mogelijk zijn om een ​​efficiëntere b-tree te bouwen met een herindexering.

Voor meer informatie over algemeen B-tree-gedrag, zie:Wikipedia:B-tree

Indexgebruik visualiseren

Als je echt nieuwsgierig bent om wat meer in de index te graven, zijn er enkele experimentele commando's/tools die je kunt proberen. Ik verwacht dat deze beperkt zijn tot alleen MongoDB 2.4 &2.6:



  1. MongoDB $ltrim

  2. Hoe kan ik het oplossen van de mislukte sockets instellen tijdens het opstarten wanneer ik de mongodb-server gebruik?

  3. MongoDB c# haalt alle overeenkomende elementen in een array binnen een document op met behulp van Definition builder

  4. MongoDB:Bereken de verblijfstijd tussen elke wijziging van de statuswaarde