sql >> Database >  >> NoSQL >> MongoDB

MongoDB Interne implementatie van indexering?

Ik denk dat je een idee hebt dat indexen worden opgeslagen in RAM. Wat als ik zeg dat ze dat niet zijn.

Allereerst moeten we begrijpen wat indexen zijn, indexen zijn in feite een aanwijzer om te vertellen waar op schijf dat document zich bevindt. Net zoals we indexering in het boek hebben, kunnen we voor snellere toegang zien welk onderwerp op welk paginanummer staat.

Dus wanneer indexen worden gemaakt, worden ze ook op de schijf opgeslagen. Maar wanneer een toepassing wordt uitgevoerd, worden ze op basis van veelvuldig gebruik en zelfs snellere toegang in het RAM geladen, maar er is een verschil tussen geladen en gemaakt.

Ook het laden van een index is niet hetzelfde als het laden van een verzameling of records in RAM. Als we een index hebben geladen, weten we welke documenten we van de schijf moeten ophalen, in tegenstelling tot het laden van alle documenten en het verifiëren van elk ervan. Dus indexen vermijden collectiescan.

Het maken van indexen is een eenmalig proces, maar elke schrijfactie op het document kan mogelijk de indexering wijzigen, dus een deel moet mogelijk opnieuw worden berekend omdat records kunnen worden geschud op basis van de wijziging in gegevens. daarom maakt indexering schrijven langzaam en lezen snel.

Zie opnieuw als een boek, als je een nieuw onderwerp van bijvoorbeeld 2 pagina's tussen het boek toevoegt, moeten alle indexen na dat onderwerpnummer opnieuw worden berekend. overeenkomstig.

  • Nee, records worden niet in RAM opgeslagen, terwijl het maken ervan alle documenten in de verzameling verwerkt en een indexblad maakt, dit zou begrijpelijkerwijs tijdrovend zijn als er te veel documenten zijn, daarom is er een optie om een ​​index op de achtergrond te maken.
  • De index wordt eenmalig gemaakt, u kunt deze verwijderen en opnieuw maken, maar deze wordt niet opnieuw gemaakt in de toepassing of de database wordt opnieuw opgestart. dat zou krankzinnig zijn voor een enorme verzameling in een shard-omgeving.
  • Nogmaals, dat is niet waar. _id wordt geleverd als geïndexeerd veld, dus index is al gemaakt voor lege verzameling, omdat wanneer u een write doet, het de index opnieuw zou berekenen. Omdat het een unieke index is, zou de verwerking sneller zijn.
  • alle records worden alleen in RAM opgeslagen als je de in-memory engine van MongoDB gebruikt, die volgens mij als enterprise-editie wordt geleverd. Vanwege indexering zou het record niet automatisch in het RAM worden geladen.


  1. Hoe een Mongodb-verzameling te verwijderen met behulp van de verzamelingsnaam in c #

  2. Mongodb-extensie toevoegen voor php 5.6 (XAMPP)

  3. De positionele operator $ van MongoDB gebruiken in een diep geneste documentquery

  4. Heroku compileert mijn activa niet vooraf om mijn app voor te bereiden op de activapijplijn