Page tree
Skip to end of metadata
Go to start of metadata

Testbedingungen

DIESER TEST BELEUCHTET NUR DIE PERFORMANCE BEIM IMPORT VON DATEN!

Die Performance wurde in der aktuellen MongoDB Version 2.4.6 (64 Bit) getestet.

Es wurde eine Testdatei mit 30 MB und 100000 Zeilen erzeugt:

# for I in {1..100000}; do \
    echo "$I,`cat /dev/urandom|head -n20|tr -dc a-zA-Z|head -c300`">>data.csv; \
  done

Der Inhalt einer Zeile sieht wie folgt aus:

1,rrlnPswYiRNYcFugaOyzobwqnkRq...OlukkOGgvHybamySmBuevMOVIKjmLX

Die Datei kann hier heruntergeladen werden:

Jeder Test wurde 3 mal durchgeführt und der schnellste Durchlauf verwendet. Es wurde immer die selbe data.csv verwendet.

Platformen

MongoLab

https://mongolab.com/

Der Import wurde von einer Amazon EC2 Instanz aus in der selben Region wie der MongoDB Server (us-east-1) getestet.

# mongoimport -h ds047438.mongolab.com --port 47438 -u bknaus -p XXXXXXXX \
  --db bknaus --collection test --type csv --file data.csv -f id,string

connected to: ds047438.mongolab.com:47438
Thu Sep 26 10:46:03.007         Progress: 7657797/30789215    24%
Thu Sep 26 10:46:03.007             24900    8300/second
Thu Sep 26 10:46:06.035         Progress: 16466597/30789215    53%
Thu Sep 26 10:46:06.035             53500    8916/second
Thu Sep 26 10:46:09.028         Progress: 25521797/30789215    82%
Thu Sep 26 10:46:09.028             82900    9211/second
Thu Sep 26 10:46:10.723 check 9 100001
Thu Sep 26 10:46:10.805 imported 100000 objects

MongoHQ

http://www.mongohq.com

Der Import wurde von einer Amazon EC2 Instanz aus in der selben Region wie der MongoDB Server (us-east-1) getestet.

# mongoimport -h paulo.mongohq.com --port 10030 -u bknaus -p XXXXXXXX \
  --db bknaus --collection test --type csv --file data.csv -f id,string

connected to: paulo.mongohq.com:10030
Thu Sep 26 10:03:30.067         Progress: 581897/30789215    1%
Thu Sep 26 10:03:30.068             1900    633/second
Thu Sep 26 10:03:33.214         Progress: 6980197/30789215    22%
Thu Sep 26 10:03:33.214             22700    3783/second
Thu Sep 26 10:03:36.092         Progress: 15665797/30789215    50%
Thu Sep 26 10:03:36.092             50900    5655/second
Thu Sep 26 10:03:39.152         Progress: 25829797/30789215    83%
Thu Sep 26 10:03:39.153             83900    6991/second
Thu Sep 26 10:03:40.656 check 9 100001
Thu Sep 26 10:03:41.394 imported 100000 objects

Amazon EC2

Es wurde mit einer Amazon EC2 Instanz vom Typ m1.large mit 2 VCPU's, 7,5 GB RAM und 420 GB SATA (1 Gigabit iSCSI) getestet.

> EC2_AMI=`ec2-describe-images -a|grep "amazon/amzn-ami-pv-2013.03.1.x86_64-ebs"|grep ebs|tail -n1|cut -f2`
> ec2-run-instances $EC2_AMI -k bknaus -t m1.large
> ssh ec2-user@ec2-54-228-161-206.eu-west-1.compute.amazonaws.com

> mongoimport --db user --collection test --type csv --file data.csv -f id,string

connected to: 127.0.0.1
Thu Sep 26 10:28:52.008         Progress: 11969797/30789215    38%
Thu Sep 26 10:28:52.008             38900    12966/second
Thu Sep 26 10:28:55.008         Progress: 25983797/30789215    84%
Thu Sep 26 10:28:55.008             84400    14066/second
Thu Sep 26 10:28:55.915 check 9 100001
Thu Sep 26 10:28:55.950 imported 100000 objects

Im ersten Versuch wurden SLES 11 SP3 64 Bit AMI's verwendet, die jedoch deutlich langsamer als Amazon AMI's waren.

Amazon EC2 SSD

Es wurde mit einer Amazon EC2 Instanz vom Typ hi1.4xlarge mit 16 VCPU's, 64 GB RAM und 2 x 1024 GB SSD (10 Gigabit iSCSI) getestet.

> EC2_AMI=`ec2-describe-images -a|grep "amazon/amzn-ami-pv-2013.03.1.x86_64-ebs"|grep ebs|tail -n1|cut -f2`
> ec2-run-instances $EC2_AMI -k bknaus -t hi1.4xlarge
> ssh ec2-user@ec2-54-217-42-48.eu-west-1.compute.amazonaws.com

> mongoimport --db user --collection test --type csv --file data.csv -f id,string

connected to: 127.0.0.1
Thu Sep 26 11:03:08.011         Progress: 19392597/30789215    62%
Thu Sep 26 11:03:08.011             63000    21000/second
Thu Sep 26 11:03:09.571 check 9 100001
Thu Sep 26 11:03:09.594 imported 100000 objects

Bei einem zweiten Test in der selben Instanz wurde das Verzeichnis "/opt/mongodb/" in eine RAM Disk gelegt. Danach lief der Import nur 0,5 Sekunden. Die Daten sind dann aber auch nicht konsistent.

MacBook SSD

Es wurde ein MacBook Air mit Core i5 (1,8 GHz), 4 GB RAM und 256 GB SSD (6 GBit SATA) getestet:

> mongoimport --db user --collection test --type csv --file data.csv -f id,string
 
connected to: 127.0.0.1
Thu Sep 26 11:49:21.001         Progress: 19854597/30789215    64%
Thu Sep 26 11:49:21.001             64500    21500/second
Thu Sep 26 11:49:22.431 check 9 100001
Thu Sep 26 11:49:22.503 imported 100000 objects

Hetzner EX4

Es wurde ein Hetzner EX4 Server mit Core i7 (3,4 GHz), 16 GB RAM und 3 TB SATA (RAID 1) getestet:

# mongoimport --db user --collection test --type csv --file data.csv -f id,string

connected to: 127.0.0.1
Thu Sep 26 14:37:24.012                 Progress: 18992194/30688895     61%
Thu Sep 26 14:37:24.012                         61900   20633/second
Thu Sep 26 14:37:25.377 check 9 100000
Thu Sep 26 14:37:25.415 imported 100000 objects

Das System wird mit einem sehr schlanken Linux Kernel unter Gentoo betrieben.

Ergebnis


 

MongoLabMongoHQAmazon EC2Amazon EC2 SSDMacBook SSDHetzner EX4
Sekunden7,811,33,91,51,51,4

 

Die Geschwindigkeit bei externen Anbietern wird primär durch die Bandbreite des Netzwerks bestimmt. Wer eigene Systeme betreiben möchte, sollte SSD’s einsetzen und schnelle CPU’s verwenden. Eine schnelle und kostengünstige Platform bietet Hetzner mit dem Root Server EX40-SSD an.

Wer höhere Schreibraten benötigt, sollte auf Sharding umstellen, was jedoch mehr Server und damit höhere Kosten zur Folge hat.

Kritikpunkte

Die Performance Tests bei MongoLab und MongoHQ konnten nur mit einer Remote Verbindung auf die Datenbank getestet werden. Ein direkter Zugriff auf den MongoDB Server ist nicht möglich. Um den Zeitverlust im Netzwerk zu reduzieren, wurde der Import von einer Amazon EC2 Instanz in der selben Region gestartet. Beide Anbieter haben auch dedizierte Systeme im Programm, die vermutlich deutlich schneller sind.

MongoSoup (http://www.mongosoup.de/) konnte nicht getestet werden, da es keinen kostenlosen Account gab.