CouchDB - Ein erfrischend anderer Ansatz
Seit einiger Zeit interessiere ich mich stark für eine Datenbank namens CouchDB. Eine kurze Übersicht findet man im CouchDB-Wiki.
Deshalb möchte ich darüber nicht allzu viele Worte verlieren. Viel eher
geht es mir darum, mit ein paar Gedanken zu spielen, die mir im Kopf
rumschwirren.
Was macht CouchDB anders als die gesamten relationalen Datenbanken?
Man ist hat keine starren Strukturen. Ist das wirklich eine gute Idee?
Meines Erachtens schon. Es kommt dabei immer darauf an, welche Daten
man bearbeitet. Bei sehr vielen statistischen Daten sind die
RDBM-Systeme sicherlich besser geeignet. Aber ehrlich gesagt, hatte ich
bisher nicht allzu viele Möglichkeiten, so was wirklich effektiv nutzen
zu können. Das mag einerseits daran liegen, dass ich noch lange kein
Profi in solchen Sachen bin, aber es liegt sicherlich auch sehr viel am
Web. Denn im Web gliedert sich sehr vieles in Dokumente, also
semistrukturierte Daten. Ein Blogeintrag wie ich ihn gerade schreibe
ist semistrukturiert. Warum? Ich habe einen Text, verschiedene Tags,
ein Datum und einen Autoren. Eine Struktur ist natürlich drin und man
könnte die Daten noch weiter strukturieren. Ist das sinnvoll? Ja, aber
es macht das System als solches komplizierter. Bleiben wir bei dem
Beispiel Blogeintrag. Jeder, der ein wenig mit RDBMS programmiert hat,
wird es verstehen, wenn ich behaupte, dass man die Tags als eigene
Tabelle kapseln sollte, sodass man keine unsauberen Strings in einem
Feld hat. Ein String á la "foo bar foobar fubar" der die Tags "foo",
"bar", "fobar" und "fubar" darstellt, ist unpassend für relationale
Datenbanken. Man kann z.B. nicht effektiv alle Einträge mit einem
bestimmten Tag auswählen. Möglich ist es, aber darauf sind relationale
Datenbanken i.d.R. nicht ausgelegt. Wie macht man so was mit CouchDB?
Ganz einfach: Man nimmt eine Liste als Feld. Effektiv dasselbe mag man
meinen. Nein, ganz sicher nicht. Denn über sog. Views
lässt sich so was sehr einfach realisieren: Einfach einen View
schreiben, der jedes Dokument auswählt, das ein bestimmtes Tag enthält
und schon hat man eine Liste aller Einträge, die dieses Tag enthalten.
Ein weiterer Vorteil ist, dass man viele Views direkt in der Datenbank
verankern kann. Somit muss man die Datenbank von dem Applikationscode
trennen. Die Trennung wird somit um ein Vielfaches sauberer. Hier
könnte man vllt. geteilter Meinung sein, aber das ist nebensächlich.
Nunja.. Ein paar Gedanken habe ich jetzt schon publik gemacht und ich
habe noch etliche Ideen. Aber über die werde ich noch in alle Ruhe und
dann im Detail berichten. Bin am Überlegen, ob ich meine Homepage
neuprogrammiere und dabei auf CouchDB setze. Man mag meinen, dass es
nicht sinnvoll ist, Software zu benutzen, die erst Alpha-Status hat.
Aber wie soll man CouchDB effektiv testen, wenn es nicht im produktiven
Einsatz läuft? Damit will ich natürlich keinen Freischein für die
Nutzung von Alpha-Projekten ausstellen, aber bei einigen Seiten könnte
dies durchaus Sinn haben. Meine Seite ist ja als "Spielplatz" für neue
Technologien konzipiert, also sehe ich kein Hindernis, mich auf das
Experiment einzulassen.