Der noSQL Key-Value-Store TokyoCabinet aka TokyoTyrant
2011-02-05 04:24Was hilfts. Auch wenn ich immer noch der Meinung bin, dass das ein Irrweg ist, das man das auch mit einem für das web optimierten RDBMS hinbekommt. Ich darf mich mit NoSQL beschäftigen.
Das interessanteste ist: man sollte auf die Datenbank-Denkweisen zurückgreifen. Wenn man B+Tree und Hash-Index über Bord werfen will, hilft auch NoSQL nicht.
Die Wahl viel also auf TokyoTyrant. Ich habe es nicht gewählt, aber ich hab’s nun an der Backe ;) allso gucken wir da mal etwas mehr unter die Haube.
Was mir schon mal gefällt, ich könnte mein check_memcached nagios-Plugin weiternutzen, weil ein
echo „stats“ | nc localhost 1978
ebenso eine rudimentäre Statistik bringt, wie sie the good old Vorbild memchached zu Tage zaubert.
Während CouchDB bereits in Debian Lenny als Paket enthalten ist (und auch noch im nun jetzt vielleicht erscheinenden Squeeze) so ist TokyoTyrant erste einmal für Debian Lenny als Paket zu organisieren. Weil es wie erwähnt aber nun im upcomming squeeze bereits enthalten ist, können wir dieses Paket einfach backporten, haben dann auch gleich den aktuellsten Stand — müssen uns aber wie üblich auch um security selber kümmern. Das geht so:
* es empfiehlt sich, die folgenden Dateien auf das gewünschte patchlevel umzubenennen, hier nenne ich alle 1.4.37-6 in 1.4.46-0 um
wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.46.tar.gz
wget ftp://ftp.de.debian.org/debian/pool/main/t/tokyocabinet/tokyocabinet_1.4.37-6.debian.tar.gz
wget ftp://ftp.de.debian.org/debian/pool/main/t/tokyocabinet/tokyocabinet_1.4.37-6.dsc* tokyocabinet_1.4.37-6.debian.tar.gz auspacken, files anpassen und umbennen (insb. dependencies, patches), einpacken
* tokyocabinet_1.4.37-6.dsc anpasssen (sha1sum, sha256sum, md5sum und filesize)dpkg-source -x tokyocabinet_1.4.46-0.dsc (patchen)
cd tokyocabinet-1.4.46
dpkg-buildpackage -B* und installieren
dpkg -i libtokyocabinet8_1.4.46-0_amd64.deb libtokyotyrant3_1.1.41-0_amd64.deb tokyotyrant-utils_1.1.41-0_amd64.deb tokyotyrant_1.1.41-0_amd64.deb
Das installieren wir schnell noch auf einem 2ten Server, denn wir wollen ja das Feature Replikation auch nutzen, wenn es schon zur Verfügung gestellt wird. Da wir, im Gegensatz zu MySQL, keine autoinkrement-Werte unserer Keys haben, weil das ja nur dummes Key-Value ist, ist die Konfiguration auch recht simple. Wir machen sie aber auch gleich debian-konform und ermöglichen uns mit dem folgenden Setup mehrere Instanzen pro Host, daher heist unsere erste Instanz tokyotyrant-a
# default ist tokyotyrant
# DAEMON_USER=“tokyo-a“
# DAEMON_GROUP=“tokyo-a“## im Startskript wird $NAME aus dem skriptnamen ermittelt — bei uns der symlink /etc/int.d/tokyotyrant-a
## NAME=“`basename $file`“LOGDIR=“/data/$NAME“
RUNDIR=“/data/$NAME“
PIDFILE=“$RUNDIR/$NAME.pid“
SCRIPTNAME=“/etc/init.d/$NAME“DATADIR=/srv/$NAME/data
ULOGDIR=/srv/$NAME/log## create socket (this is the debian default)
#SERVERHOST=“$RUNDIR/$NAME.sock“
# listening host/address and port
SERVERHOST=0.0.0.0
SERVERPORT=1978# replication configuration — MASTER ist der remote Host
MASTERHOST=IP-von-replic-host
MASTERPORT=1978
# eigene ServerID – auf replic-host bitte erhöhen
SERVERID=1## database name and options (see ttserver(1) for tuning options) — default
DBNAME=$NAME.tch#bnum=100000000#rcnum=10000#xmsiz=536870912
Fertig. Nun können wir schnell mal ein wenig testen, bevor die wirkliche Admin-Arbeit losgeht:
tcrmgr list -port 1978 -pv replic-host
tcrmgr list -port 1978 -pv localhost
tcrmgr put -port 1978 localhost key2 value2
tcrmgr list -port 1978 -pv localhost
tcrmgr list -port 1978 -pv replic-host
tcrmgr put -port 1978 replic-host key2 value2+2
tcrmgr list -port 1978 -pv localhost
tcrmgr out -port 1978 localhost key2
tcrmgr list -port 1978 -pv replic-host
tcrmgr vanish -port 1978 localhost
Das leidige Thema backup – wir kennen das ja schon von mysql, ketzerisch behaupte ich ja immer, das SELECT * deswegen schneller ist als ein SELECT id, field1 weil es für mysqldump benötigt wird. Nur so lässt sich auch auch TokyoTyrant backupen.
tcrmgr list -pv localhost > ../backup.tsv && tcrmgr importtsv -port 1978 replic-host ../original.tsv
Eigentlich gibt es noch eine Methode copy – aber die funktioniert seit geraumen Versionen nicht mehr. (Google verified.)
tcrmgr copy -port 1978 localhost ../backup.tch
tcrmgr: error: 9999: miscellaneous error
So, im Folgenden dann das, was man über Datenbanken wissen muss, welche Konfigurationsparameter sinnvoll und wichtig sind etc. Also das eigentlich spannende.