sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB/Mongoose-index gör frågan snabbare eller långsammare?

Du läser fel

Du misstolkar avsikten med det citerade blocket där om vad .ensureIndex() ( numera utfasad, men fortfarande kallad av mongoose code ) gör faktiskt här i sammanhanget.

I mongoose definierar du ett index antingen på schema- eller modellnivå som är lämpligt för din design. Vad mongoose "automatiskt" gör för dig är att den vid anslutning inspekterar varje registrerad modell och anropar sedan lämplig .ensureIndex() metoder för de angivna indexdefinitionerna.

Vad gör detta egentligen?

Tja, i de flesta fall efter att du redan har startat upp din applikation innan och code>.ensureIndex() Metoden som kördes är Absolut ingenting . Det är lite av en överdrift, men det är mer eller mindre sant.

Eftersom indexdefinitionen redan har skapats på serversamlingen gör ett efterföljande anrop ingenting. Dvs det tappar inte indexet och "återskapar". Så den verkliga kostnaden är i princip ingenting, när själva indexet har skapats.

Skapa index

Så eftersom mongoose bara är ett lager ovanpå standard-API:et, createIndex() metod innehåller alla detaljer om vad som händer.

Det finns några detaljer att ta hänsyn till här, till exempel att ett indexbygge kan ske i "bakgrunden", och även om detta är mindre påträngande för din applikation kommer det på sin egen kostnad. Särskilt att indexstorleken från "bakgrundsgenerering" kommer att vara större än om du byggde den i förgrunden, vilket blockerar andra operationer.

Alla index har också en kostnad, särskilt när det gäller diskanvändning samt en extra kostnad för att skriva ytterligare information utanför själva insamlingsdatan.

Fördelarna med ett index är att det är mycket snabbare att "söka" efter värden som finns i ett index än att söka igenom hela samlingen och matcha de möjliga villkoren.

Dessa är de grundläggande "avvägningarna" förknippade med index.

Implementeringsmönster

Tillbaka till det citerade blocket från dokumentationen finns det en verklig avsikt bakom detta råd.

Det är typiskt i distributionsmönster och särskilt vid datamigreringar att göra saker i denna ordning:

  1. Fylla data till relevanta samlingar/tabeller
  2. Aktivera index på insamlings-/tabelldata som är relevanta för dina behov

Detta beror på att det är en kostnad involverad i att skapa index, och som tidigare nämnts är det önskvärt att få den mest optimala storleken från indexuppbyggnaden, samt att undvika att varje dokumentinfogning också har överkostnaderna för att skriva en indexpost när du är gör denna "last" i bulk.

Så det är vad index är till för, det är kostnaderna och fördelarna och budskapet i mangustdokumentationen förklaras.

I allmänhet föreslår jag dock att du läser på Databasindex för vad de är och vad de gör. Tänk på att gå in i ett bibliotek för att hitta en bok. Det finns ett kartotek där vid entrén. Går du runt på biblioteket för att hitta den bok du vill ha? Eller slår du upp den i kartoteket för att se var den finns? Det indexet tog någon tid att skapa och även hålla det uppdaterat, men det sparar "dig" tid att gå runt i hela biblioteket bara så att du kan hitta din bok.



  1. Importera csv till mongodb med PHP-kod

  2. Anrop till odefinierad metod MongoDB\Driver\ReadConcern::isDefault()

  3. Mongoose eller fråga

  4. MongoDb-aggregering för filtreringslista baserad på ID som finns i objektet i arrayen från alla dokument i samma samling