sql >> Database >  >> NoSQL >> MongoDB

De gevaren van het bouwen van indexen op MongoDB

Indexen zijn een cruciaal onderdeel van elke databasebewerking. Het definiëren van de juiste indexen kan een enorm verschil maken voor de prestaties van uw databaseservers. Het maken van indexen in MongoDB heeft echter verschillende valkuilen waarvan u zich bewust moet zijn voor uw dagelijkse activiteiten. MongoDB op hoog niveau ondersteunt drie technieken om indexen op uw collecties te bouwen.

1. Voorgrondindex bouwen

Als je een index op de voorgrond bouwt, worden alle andere bewerkingen op de database geblokkeerd – bij een grote verzameling kan dit enkele uren duren. Dit houdt in dat uw database niet beschikbaar is tijdens de opbouw van de index. Aangezien dit de standaardmodus is voor het bouwen van indexen, is het niet verwonderlijk dat veel ontwikkelaars zichzelf in de voet schieten door onbedoelde index-builds te veroorzaken. Er is echt geen goede reden om een ​​voorgrondindex te activeren die is gebouwd op een productieserver (tenzij u weet dat de verzameling een kleine hoeveelheid gegevens bevat).

2. Achtergrondindex bouwen

Zoals de naam al aangeeft, bouwt het achtergrondindexeringsproces de index op de achtergrond op zonder de beschikbaarheid van uw databaseserver te beïnvloeden. Het is echter nog steeds een resource-intensieve operatie en u kunt verwachten dat de prestaties afnemen. Omdat het op de achtergrond gebeurt, kan het ook veel langer duren om te bouwen dan de voorgrondindexen. In de vorige versies van MongoDB (<2.6) wanneer je een achtergrondindex bouwde op de primaire van een replicaset, zou deze draaien als "voorgrond" gebouwd op de secundaire servers, gelukkig is dit niet langer het geval - het is op de achtergrond gebouwd alle knooppunten. Als een opbouw van een achtergrondindex wordt onderbroken, wordt deze hervat als een opbouw van een voorgrondindex bij het opnieuw opstarten van de server.

3. Rollende indexopbouw

Het proces voor het opbouwen van een voortschrijdende index bouwt de index op slechts één knooppunt tegelijk. Het gaat ongeveer als volgt:

  1. Draai een secundair knooppunt uit de replicaset (u kunt dit doen door poorten te wijzigen of opnieuw op te starten in de zelfstandige modus).
  2. Bouw de index op dit knooppunt op de voorgrond. Zodra de index is opgebouwd, draait u het knooppunt terug in de replicaset.
  3. Zodra het knooppunt de wijzigingen heeft ingehaald, gaat u verder met het volgende knooppunt. Als het volgende knooppunt het primaire knooppunt is, moet u een rs.stepDown() uitvoeren om er een secundair knooppunt van te maken.
  4. Spoel en herhaal.

Meer details over het indexopbouwproces staan ​​in de MongoDB-documentatie.

Met behulp van rolling index-builds kunt u een index bouwen zonder noemenswaardige prestatie-impact voor uw app. Er is echter sprake van failover - dus uw toepassing zou dat moeten kunnen verwerken (wat het sowieso nodig heeft).

Kun je een rollende index bouwen als je geen replicaset hebt? Helaas voor standalone instanties is de enige optie een "Background index build".

De Rolling index build is onze favoriete benadering voor het bouwen van indexen bij ScaleGrid. We bieden zelfs een gebruikersinterface en maken het u gemakkelijk om het hele proces vanuit onze gebruikersinterface te starten. Onze backend zal alle orkestratie uitvoeren die nodig is voor de volledige index-build - het zal een server-by-server-index-build activeren. U hoeft alleen de configuratie bij ons te regelen en vervolgens te wijzen en te klikken!

Zoals altijd, als je nog vragen hebt, kun je contact met ons opnemen via [email protected].


  1. Hoe moet ik verbinding maken met een Redis-instantie vanuit een AWS Lambda-functie?

  2. Redis - Verlopen indexen worden niet verwijderd

  3. Django Celery kan postgres db in taak niet opvragen

  4. java - MongoDB + Solr-uitvoeringen