sql >> Databasteknik >  >> NoSQL >> MongoDB

Några detaljerade och specifika skäl till varför MongoDB är mycket snabbare än SQL DB?

Låt oss först jämföra äpplen med äpplen:Läser och skriver med MongoDB är som enstaka läsningar och skrivningar med primärnyckel i en tabell utan icke-klustrade index i en RDBMS.

Så låt jämföra exakt det:http://mysqlha.blogspot.de/2010/09/mysql-versus-mongodb-yet-another-silly.html

Och det visar sig att hastighetsskillnaden i en rättvis jämförelse av exakt samma primitiva operation inte är stor. Faktum är att MySQL är något snabbare. Jag skulle säga att de är likvärdiga.

Varför? För faktiskt gör båda systemen liknande saker i just det här riktmärket. Att returnera en enskild rad, sökt med primärnyckel, är faktiskt inte så mycket arbete. Det är en mycket snabb operation. Jag misstänker att omkostnader för kommunikation över processer är en stor del av det.

Min gissning är att den mer avstämda koden i MySQL uppväger de lite mindre systematiska omkostnaderna för MongoDB (inga logiska lås och förmodligen en del andra småsaker).

Detta leder till en intressant slutsats:Du kan använda MySQL som en dokumentdatabas och få utmärkta prestanda av det.

Om intervjuaren sa:"Vi bryr oss inte om dokument eller stilar, vi behöver bara en mycket snabbare databas, tycker du att vi ska använda MySQL eller MongoDB?", vad skulle jag svara?

Jag skulle rekommendera att bortse från prestanda för ett ögonblick och titta på den relativa styrkan hos de två systemen. Saker som skalning (väg upp) och replikering kommer att tänka på för MongoDB. För MySQL finns det många fler funktioner som rika frågor, samtidighetsmodeller, bättre verktyg och mognad och mycket mer.

I grund och botten kan du byta funktioner mot prestanda. Är villiga att göra det? Det är ett val som inte kan göras generellt. Om du väljer prestanda till varje pris, överväg att ställa in MySQL först innan du lägger till en annan teknik.

Här är vad som händer när en klient hämtar en enda rad/dokument med primärnyckel. Jag kommer att kommentera skillnaderna mellan de båda systemen:

  1. Klienten bygger ett binärt kommando (samma)
  2. Klienten skickar det över TCP (samma)
  3. Server analyserar kommandot (samma)
  4. Server får åtkomst till frågeplan från cache (endast SQL, inte MongoDB, inte HandlerSocket)
  5. Server ber B-Tree-komponenten att komma åt raden (samma)
  6. Servern tar ett fysiskt skrivskyddat lås på B-Tree-vägen som leder till raden (samma)
  7. Servern tar ett logiskt lås på raden (endast SQL, inte MongoDB, inte HandlerSocket)
  8. Server serialiserar raden och skickar den över TCP (samma)
  9. Klienten avserialiserar det (samma)

Det finns bara två ytterligare steg för typiska SQL-baserade RDBMS:er. Det är därför det egentligen inte är någon skillnad.



  1. ScaleGrid tillkännager Shared MongoDB Hosting på Amazon AWS

  2. Ta bort en post från arrayen med MongoDB-Java-drivrutinen

  3. Python - Hur man kontrollerar om Redis-servern är tillgänglig

  4. Dela en sträng med ett tecken i Lua