Index är en kritisk del av alla databasoperationer. Att definiera rätt index kan göra en enorm skillnad för prestandan för dina databasservrar. Men att skapa index i MongoDB har flera fallgropar som du måste vara medveten om för din dagliga verksamhet. MongoDB på hög nivå stöder tre tekniker för att bygga index på dina samlingar.
1. Förgrundsindexbygge
När du bygger ett index i förgrunden blockerar det alla andra operationer i databasen – på en stor samling kan det ta flera timmar. Detta innebär att din databas är nere under hela indexuppbyggnaden. Med tanke på att detta är standardläget för att bygga index är det inte förvånande att många utvecklare skjuter sig själva i foten och utlöser oavsiktliga indexbyggen. Det finns egentligen ingen bra anledning att utlösa ett förgrundsindex som bygger på en produktionsserver (om du inte vet att samlingen har en liten mängd data).
2. Bakgrundsindexuppbyggnad
Som namnet antyder bygger bakgrundsindexeringsprocessen indexet i bakgrunden utan att påverka tillgängligheten för din databasserver. Det är dock fortfarande en resurskrävande operation och du bör förvänta dig att se prestandaförsämringar. Eftersom det händer i bakgrunden kan det ta mycket längre tid att bygga än förgrundsindexen. I de tidigare versionerna av MongoDB (<2.6) när du byggde ett bakgrundsindex på det primära av en replikuppsättning så kördes det som "förgrundsbyggd" på de sekundära servrarna, tack och lov är det inte längre fallet - det är bakgrundsbyggd på alla noder. Om ett bakgrundsindexbygge avbryts kommer det att återupptas som ett förgrundsindexbygge vid omstart av servern.
3. Rullande indexuppbyggnad
Den rullande indexuppbyggnadsprocessen bygger indexet på endast en nod åt gången. Det är ungefär så här:
- Rotera en sekundär nod från replikuppsättningen (du kan göra detta genom att byta portar eller starta om i fristående läge).
- Bygg indexet på denna nod i förgrunden. När indexet är byggt, rotera noden tillbaka till replikuppsättningen.
- När noden har kommit ikapp ändringarna, gå vidare till nästa nod. Om nästa nod är den primära måste du göra en rs.stepDown() för att göra den till en sekundär.
- Skölj och upprepa.
Mer information om indexbyggeprocessen finns i MongoDB-dokumentationen.
Med hjälp av rullande indexbyggen kan du bygga ett index utan någon betydande prestandapåverkan för din app. Men det är failover inblandat – så din applikation borde kunna hantera det (vilket den behöver i alla fall).
Kan du bygga ett rullande index om du inte har en replikuppsättning? Tyvärr för fristående instanser är det enda alternativet en "Bakgrundsindexuppbyggnad".
Det rullande indexbygget är vårt favoritsätt för att bygga index på ScaleGrid. Vi tillhandahåller till och med ett användargränssnitt och gör det enkelt för dig att starta hela processen från vårt användargränssnitt. Vår backend kommer att göra all orkestrering som krävs för hela indexbygget - det kommer att trigga en server för server-indexuppbyggnad. Du behöver bara ställa in dig hos oss och sedan peka och klicka!
Som alltid, om du har ytterligare frågor kan du kontakta oss på [email protected].