NoSQL: Redis, CouchDB och MongoDB prestanda

Eftersom jag testar NoSQL-mjukvaror såom Redis, CouchDB och MongoDB just nu  så genomförde jag ett litet prestandatest där Redis vann över CouchDB och MongoDB.

Så här lång tid tog det att stoppa in 100 000 objekt i en databas:

MongoDB

db version v1.2.2, pdfile version 4.5
real    13.306s
user    9.130s
sys     0.940s

Redis

Redis version 1.3.17
real    7.044s
user    5.330s
sys     0.070s
Redis version 2.1.5 (8d3e063a:0)
real    6.400s
user    4.760s
sys     0.110s

CouchDB

Apache CouchDB version 0.10.0

Fick inte vara med för att det tog 4 sekunder att sätta in 100 objekt. Ungefär samma prestanda som Amazon SQS, och då använde jag även full_commit=False vilket bör öka prestandan. Ska testa Hovercraft för att se om jag kan få upp prestandan.

Observera även att ovan tid inkluderar exekvering av Python, inladdning av moduler samt den kod som körs mellan det att information trycks in.

9 reaktioner på ”NoSQL: Redis, CouchDB och MongoDB prestanda

  1. Ska man ladda databasen med en större mängd dokument erbjuder CouchDB ett bulk API där man skickar över hela rasket i ett anrop. Då går det mycket fortare.

    CouchDB är f.ö. uppe i version 1.0.1

  2. Version 1.2 av MongoDB är ganska gammal. Den är nu uppe i version 1.6, och jag misstänker att det har kommit in en del prestandaoptimeringar.

    Vill dessutom påpeka att de olika databaserna du jämför har ganska olika funktioner, och därmed även olika användningsområden. Som vanligt när det gäller databaser är det en tradeoff mellan funktionalitet och prestanda.

  3. @Jonatan: Kul! Ska testa den nya versionen av CouchDB. Och då har så klart rätt att det är som att jämföra äpplen och päron, men i detta fallet så är jag enbart ute efter prestanda.

    @Henrik: Menar du Hoovercraft eller något annat?

  4. Ursäkta, men här måste du ha gjort något fel. Utan att ha kört prestandatester mot CouchDB så säger jag att du måste ha gjort något knas.
    Har arbetat med CouchDB en hel del och detta är inte siffror som jag känner igen. Ska se om jag hinner få hem en CouchDB på min nya burk och se om jag hinner testa lite på tåget hem.

  5. Fick bråka lite med Virtualbox för att få ihop det hela, jag utgick från ett helt vanligt test (kodat i php, galet;-) som du hittar på http://debuggable.com/posts/couchdb-insert-benchmarks:4a4365e2-9d04-4170-9f88-2de34834cda3

    Jag kör i en VM som kör Linux Mint Debian och som har 766MB RAM att leka, en processor på 1.6Ghz att tillgå.

    I runda slängar så slutar min benchmark på följande när det gäller skrivningar:

    100 000, ~1.7s
    500 000, ~9.5s
    1 000 000, ~18s

    Du kan se hela min logg på http://pastebin.com/ZMheuHCy

    Detta är bara ETT test, jag vore glad om du kunde dumpa ut det du testade med så testar jag gärna på min burk.

    Sen såg https://github.com/janx/mdb-tt-benchmark ut som en ganska bra testsvit, den testar TokyoTyrant mot MongoDB och CouchDB. Tyvärr är jag inte alls med på hur man gör för att installera rubygems, trodde det var lika lätt som PIP, men icke;-)

  6. Vi använder couchdb och en snabb koll i loggarna visar att vi stoppar in 182821 objekt (totalt 126 MB data) på 59630 ms.
    Och vi gör bulk inserts på 1000 st åt gången samt att det är på vanlig budget hårdvara i vår utvecklingsmiljö.

    Alltså, drygt 32,6 sekunder för 100 000 objekt, så jag tror inte couch är så väldigt långt bort från de andra databaserna.

  7. Glöm inte heller att Redis inte nödvändigtvis skalar om du har mycket data. Därför kommer MongoDB och CouchDB att vara snabbare när du har så mycket data att det behöver spridas över flera burkar.

Lämna ett svar

E-postadressen publiceras inte. Obligatoriska fält är märkta *