Seitenanfang

ElasticSearch vs. MongoDB: Installation

Ein kleiner Vergleichstest soll zeigen, wie sich mySQL, ElasticSearch oder MongoDB im Praxisumfeld einer echten Applikation bei komplexen Suchanfragen schlagen. Doch bevor alle drei abgefragt werden können, müssen sie erstmal installiert werden.

ElasticSearch-MongoDB-MySQL.jpgDazu sollen jeweils ein Datenbankserver und der Perl-Client in der jeweils neusten Version installiert werden. Basis für beide Installationen sind Debian-Systeme. Die Server laufen auf einem Debian 7 (Wheezy) während die Clients auf meinem Entwicklungssystem mit Debian 6 (Squeeze) arbeiten müssen.

ElasticSearch

Ein Debian-Paket für ElasticSearch sucht man vergeblich, weder Client noch Server werden von Wheezy oder Squeeze bereitgestellt. Auf der ElasticSearch-Hompage findet sich allerdings ein Debian-Paket zum Download, das sich auch problemlos mit dpkg -i elasticsearch-1.3.4.deb installalieren lässt.

Der Startversuch mit /etc/init.d/elasticsearch start schlägt allerdings stillschweigend fehl. Nach einiger Suche stellte sich raus, dass die für Java-Applikationen übliche Versionsproblematik zugeschlagen hat: ElasticSearch braucht Java 7, installiert war aber Java 6. Das Problem lies sich mit apt-get install openjdk-7-jdk lösen.

Negativ fällt auf, dass ElasticSearch zwar Fehlermeldungen beim Start anzeigt, diese durch die Verwendung des Tools start-stop-daemon allerdings unwiederbringlich verloren gehen. Das mitgelieferte Init-Script /etc/init.d/elasticsearch unternimmt auch keinerlei Versuche, eventuelle Probleme zu identifizieren und zu berichten - es meldet einfach einen erfolgreichen Start, auch wenn dieser fehlgeschlagen ist.

Der Perl-Client für ElasticSearch ist ebenfalls nicht im Debian-Repository zu finden, wohl aber auf CPAN. Bei der Installation fällt nur die unglaubliche Menge an Abhängigkeiten auf, darunter auch Moo, ein alternatives OOP-System für Perl. Eine Client-Bibliothek, speziell für etwas so häufig eingesetztes wie eine Datenbank, sollte leichtgewichtiger sein und keinen unnötigen Schnickschnack nutzen, der letztendlich nur mehr Entwicklungskomfort zum Preis eines nennenswerten Performance-Impacts bei jedem Funktionsaufruf eintauscht und die Applikaten ressourcenhungriger macht. Die Installation selbst lief CPAN-typisch problemlos.

MongoDB

Im Gegensatz zu ElasticSearch gibt es zumindest Debian-Pakete für den MongoDB-Server und die Client-Libs. Mit apt-get install mongodb-server bzw. apt-get install mongodb-clients sind diese schnell installiert, allerdings hoffnungslos veraltet. MongoDB ist relativ jung und jede neue Version bringt erhebliche Verbesserungen gegenüber den Vorgängern. Aktuell ist 2.6, Debian Wheezy bietet mit 2.0 nur eine drei Major-Releases alte Version an.

Glücklicherweise gestalten sich MongoDB-Upgrades sehr unkompliziert. Ich habe mir angewöhnt, nur noch Symlinks unter /usr/bin zu nutzen, das erleichtert auch zukünftige Upgrades. Die neuste Version findet sich auf der MongoDB-Homepage als .tar.gz Archiv.

Nach dem Download verschiebe ich zunächst die Debian-Version in ein entsprechendes Unterverzeichnis, dann wird die aktuelle MongoDB-Version ausgepackt und gelinkt:

vs-dbtest:/tmp# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.5.tgz
--2014-10-31 11:57:13-- https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.5.tgz
Auflösen des Hostnamen »fastdl.mongodb.org (fastdl.mongodb.org)«... 54.192.47.30, 54.192.46.185, 54.192.46.167, ...
Verbindungsaufbau zu fastdl.mongodb.org (fastdl.mongodb.org)|54.192.47.30|:443... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 115741898 (110M) [application/x-gzip]
In »»mongodb-linux-x86_64-2.6.5.tgz«« speichern.

100%[==========================================================================================================>] 115.741.898 596K/s in 2m 31s

2014-10-31 11:59:46 (750 KB/s) - »»mongodb-linux-x86_64-2.6.5.tgz«« gespeichert [115741898/115741898]

vs-dbtest:/tmp# cd /usr/bin
vs-dbtest:/usr/bin# mkdir mongodb-2.0.6
vs-dbtest:/usr/bin# mv mongo* mongodb-2.0.6/
mv: Verschieben von „mongodb-2.0.6" in eigenes Unterverzeichnis („mongodb-2.0.6/mongodb-2.0.6") nicht möglich
vs-dbtest:/usr/bin# tar -xzf /tmp/mongodb-linux-x86_64-2.6.5.tgz
vs-dbtest:/usr/bin# ln -sv mongodb-linux-x86_64-2.6.5/bin/* .
„./bsondump" -> „mongodb-linux-x86_64-2.6.5/bin/bsondump"
„./mongo" -> „mongodb-linux-x86_64-2.6.5/bin/mongo"
„./mongod" -> „mongodb-linux-x86_64-2.6.5/bin/mongod"
„./mongodump" -> „mongodb-linux-x86_64-2.6.5/bin/mongodump"
„./mongoexport" -> „mongodb-linux-x86_64-2.6.5/bin/mongoexport"
„./mongofiles" -> „mongodb-linux-x86_64-2.6.5/bin/mongofiles"
„./mongoimport" -> „mongodb-linux-x86_64-2.6.5/bin/mongoimport"
„./mongooplog" -> „mongodb-linux-x86_64-2.6.5/bin/mongooplog"
„./mongoperf" -> „mongodb-linux-x86_64-2.6.5/bin/mongoperf"
„./mongorestore" -> „mongodb-linux-x86_64-2.6.5/bin/mongorestore"
„./mongos" -> „mongodb-linux-x86_64-2.6.5/bin/mongos"
„./mongostat" -> „mongodb-linux-x86_64-2.6.5/bin/mongostat"
„./mongotop" -> „mongodb-linux-x86_64-2.6.5/bin/mongotop"
vs-dbtest:/usr/bin# /etc/init.d/mongodb start
[ ok ] Starting database: mongodb.

Damit ist MongoDB installiert und gestartet.

Der Client lässt sich mit cpan MongoDB genau so einfach von CPAN installieren wie der von ElasticSearch. Die Dependency-Liste ist ein wenig kürzer, aber immernoch zu lang und auch hier findet sich mit Moose eine alternative OOP-Welt, auf die in solchen Modulen eigentlich verzichtet werden sollte.

mySQL

Für Server und Client finden sich passende Pakete für beide Debian-Versionen. Der Unterschied zwischen der Distributions-Version und der aktuellen Version ist bei einem so alten Projekt nicht so gravierend, dass sich ein manuelles Update lohnen würde. Installieren musste ich gar nichts, weil zu meinem Entwicklungssystem bereits alle Komponenten gehören.

Fazit

Für mySQL musste ich gar nichts machen, aber selbst wenn ich auf kein fertiges System zurückgreifen könnte, wäre die erste Installation vermutlich die einfachste gewesen. Dann müssten allerdings noch User und Datenbank von Hand erstellt werden, was bei den anderen Lösungen entfällt.

MongoDB ist in der Installation auf Grund der Java-Probleme von ElasticSearch mein Favorit, auch weil ich genau diese Probleme bei jedem Betriebssystem- oder ElasticSearch-Upgrade wieder befürchte.

PS: Ubuntu stellt im Gegensatz zu Debian wenigstens MongoDB Version 2.4.9 zur Verfügung. Ob ich für den Test noch ein manuelles Upgrade auf 2.6 durchgeführt hätte, weiß ich nicht. 2.0 ist dagegen definitiv viel zu alt, weil sich mit 2.2 und 2.4 speziell bei der Performance einiges getan hat.

 

Noch keine Kommentare. Schreib was dazu

Schreib was dazu

Die folgenden HTML-Tags sind erlaubt:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>