sql >> Database >  >> NoSQL >> MongoDB

MongoDB grote index bouwen erg traag

Misvattingen

Snelheid

Zelfs als we het niet hebben over een index met meerdere sleutels, is dit wat er gebeurt. Er is een enorme tafelscan gaande. Dus mongoDB herhaalt de documenten, probeert het te indexeren veld te vinden, evalueert dat veld (naar null als het niet bestaat in het huidige document) en schrijft zijn bevindingen naar niet minder dan 6 bestanden aangezien we het hebben over 6 indices. Rekenen:200.000.000 / 86400 * 5 vertelt ons dat mongoDB dit doet voor ongeveer 460 documenten per seconde of heeft slechts 2,2 milliseconden per document nodig . Dat zou ik niet traag willen noemen. Het kan lang duren, maar het is niet traag.

{background:true}

Het gebruik van deze parameter doet niet sluit u uit de databases. Integendeel, wat duidelijk wordt vermeld in de documenten, zowel op de Index aanmaken sectie en in het zelfstudiegedeelte over het maken van indices op de achtergrond . Er is echter een zin die gemakkelijk verkeerd kan worden geïnterpreteerd:

Wat dat betekent is dat u geen bewerkingen kunt uitvoeren die van toepassing zijn op alle databases en vereisen een lees- of schrijfblokkering.

Manieren om te verbeteren (in de toekomst)

Sharded Cluster

Gebruik een gedeeld cluster met replicasetshards. Het is eenvoudig in te stellen en heeft naast verbeterde prestaties meerdere voordelen. Een daarvan is eenvoudige schaalbaarheid. Het toevoegen van een scherf (en dus het toevoegen van ruimte en rekenkracht aan een cluster) is zeer eenvoudig. Back-ups hebben minder impact op de applicatie. Er is geen single point of failure meer (mits goed gedaan, dit geldt zelfs voor uitval op de schaal van een heel datacenter).

Gebruik een ander bestandssysteem

Sorry, het uitvoeren van een schijf io prestatieafhankelijke applicatie op een Windows Server heeft geen zin voor mij - helemaal niet. ExtFS4 of XFS zijn tussen de 25% en 40% sneller dan NTFS of ReFS, afhankelijk van de optimalisatie. Dit maakt een echte verschil voor toepassingen die net zo afhankelijk zijn van schijf-IO, zoals uw gebruiksscenario. We hebben het over een kwestie van dagen (zelfs zonder rekening te houden met de efficiëntere geheugentoewijzing en het verminderde geheugenverbruik van het besturingssysteem op Linux-systemen).

{background:true}

Hoewel dit de prestaties niet echt verbetert (het bouwen van indexen op de achtergrond duurt om voor de hand liggende redenen langer dan op de voorgrond), blijft uw toepassing beschikbaar gedurende de tijd dat de index wordt gebouwd. Dus afhankelijk van uw behoeften kan dit een haalbare optie zijn.

Kanttekening :Het is een Slecht Idee™ , om verticaal te schalen bij gebruik van mongoDB, omdat het expliciet is ontworpen om horizontaal te worden geschaald. Dit geldt met name voor grote collecties zoals die van u, aangezien parallelle verwerking de prestaties van uw toepassing aanzienlijk zou verbeteren.




  1. Apache Hadoop Ozon Beveiliging – Authenticatie

  2. Java-stuurprogramma-equivalent voor Object.bsonsize (doc) van JavaScript-shell?

  3. Hoe authenticatie op MongoDB inschakelen via Docker?

  4. weergave van de som van alle opgehaalde bestanden in mongodb-nodejs-stuurprogramma