sql >> Database teknologi >  >> NoSQL >> MongoDB

Farerne ved at bygge indekser på MongoDB

Indekser er en kritisk del af enhver databaseoperation. At definere de rigtige indekser kan gøre en enorm forskel for ydeevnen af ​​dine databaseservere. Men at oprette indekser i MongoDB har flere faldgruber, som du skal være opmærksom på i din daglige drift. MongoDB på et højt niveau understøtter tre teknikker til at bygge indekser på dine samlinger.

1. Forgrundsindeksopbygning

Når du bygger et indeks i forgrunden, blokerer det for alle andre operationer på databasen – på en stor samling kan dette tage flere timer. Dette indebærer, at din database er nede under indeksopbygningens varighed. I betragtning af, at dette er standardtilstanden til at bygge indekser, er det ikke overraskende, at mange udviklere skyder sig selv i foden og udløser utilsigtede indeksbygninger. Der er virkelig ingen god grund til at udløse et forgrundsindeks på en produktionsserver (medmindre du ved, at samlingen har en lille mængde data).

2. Opbygning af baggrundsindeks

Som navnet antyder, bygger baggrundsindekseringsprocessen indekset i baggrunden uden at påvirke tilgængeligheden af ​​din databaseserver. Det er dog stadig en ressourcekrævende operation, og du skal forvente at se ydeevneforringelse. Da det også sker i baggrunden, kan det tage meget længere tid at bygge end forgrundsindekserne. I de tidligere versioner af MongoDB (<2.6), når du byggede et baggrundsindeks på det primære af et replikasæt, ville det køre som "forgrunds" build på de sekundære servere, heldigvis er det ikke længere tilfældet - det er baggrundsbygget på alle noderne. Hvis en baggrundsindeksbygning afbrydes, genoptages den som en forgrundsindeksbygning ved genstart af serveren.

3. Rolling Index Build

Den rullende indeksopbygningsproces bygger kun indekset på én node ad gangen. Det lyder sådan her:

  1. Rotér en sekundær node ud af replikasættet (du kan gøre dette ved at ændre porte eller genstarte i selvstændig tilstand).
  2. Byg indekset på denne node i forgrunden. Når indekset er bygget, skal du rotere noden tilbage i replikasættet.
  3. Når noden har indhentet ændringerne, gå videre til den næste node. Hvis den næste node er den primære, skal du lave en rs.stepDown() for at gøre den til en sekundær.
  4. Skyl og gentag.

Flere detaljer om indeksopbygningsprocessen findes i MongoDB-dokumentationen.

Ved at bruge rullende indeksbuilds kan du opbygge et indeks uden nogen væsentlig indvirkning på ydeevnen for din applikation. Der er dog failover involveret – så din applikation burde være i stand til at håndtere det (hvilket den alligevel skal).

Kan du lave et rullende indeks, hvis du ikke har et replikasæt? Desværre for selvstændige tilfælde er den eneste mulighed en "Baggrundsindeks build".

Den rullende indeksbygning er vores foretrukne tilgang til opbygning af indekser hos ScaleGrid. Vi leverer endda en brugergrænseflade og gør det nemt for dig at starte hele processen fra vores brugergrænseflade. Vores backend vil udføre al den orkestrering, der er nødvendig for den fulde indeksbygning – den vil udløse en server for server indeksbygning. Du skal bare konfigurere os og derefter pege og klikke!

Som altid, hvis du har yderligere spørgsmål, kan du kontakte os på [email protected].


  1. MongoDB diakritisk følsom søgning viser ikke alle accentuerede (ord med diakritisk tegn) rækker som forventet og omvendt

  2. JedisPoolConfig kan ikke tildeles til GenericObjectPoolConfig

  3. Redis filtrer efter område, sorter og returner 10 først

  4. Enhedstest med MongoDB