Entspannt auf der Couch lümmeln

Ein PHP-Wrapper für die CouchDB
Kommentare

Dokumentbasierte Datenbanken sind nicht nur ein Hype, sondern eine sehr ernst zu nehmende Alternative für Webapplikationen. CouchDB ist mit Sicherheit eine der am weitesten verbreitete und am besten skalierenden Varianten unter den Projekten. Dass es kein Hexenwerk ist, mit PHP auf eine „Couch“ zuzugreifen, werden Sie in diesem Artikel sehen und beim Bauen eines einfachen Wrappers selbst feststellen. Getreu dem Motto: Relax!

Moment mal! Hat Andy nicht gerade noch in den letzten Ausgaben über PostgreSQL geschrieben? Jetzt CouchDB? Sind das nicht zwei grundverschiedene Dinge? Im Prinzip ja, aber auch nein. Nein, weil CouchDB genauso wie PostgreSQL eine Datenbank ist, um – richtig! – Daten zu speichern. Ja, weil das dahinterstehende Prinzip ein anderes ist. CouchDB ist eine dokumentbasierte Datenbank im Gegensatz zu PostgreSQL (und natürlich anderen „Banken“ wie Oracle, DB2, MSSQL oder MySQL), das ein relationales Datenbank-Management-System (RDBMS) ist. Nochmal zu erklären, was ein relationales Datenbanksystem ist, spare ich mir an dieser Stelle, denn das Thema wurde bereits ausführlich besprochen. Allerdings möchte ich an dieser Stelle in der Tat klären, was ein dokumentbasiertes Datenbanksystem ist.

Was ist eine dokumentbasierte Datenbank?

Alleine die Aufzählung der Beispiele und deren Bekanntheitsgrad, der relationale Datenbanken im vorigen Abschnitt zeigt, dass wir, was das Speichern von Daten angeht, hauptsächlich in einer relationalen Welt leben. Wir teilen größere und vermeintlich zusammengehörende Daten in kleinere Datensätze auf und legen diese, beschrieben durch ihr Verhältnis zueinander, in einem RDBMS ab. Wollen wir auf die Daten zugreifen, verknüpfen wir die Datensätze mithilfe der Sprache SQL wieder zu einem Ganzen (Datensatz). Das ist ein gelerntes und erprobtes System, das in vielen Anwendungsfällen nahezu ideal ist – vorausgesetzt, eine solche Datenbank ist gut entworfen.

Dagegen ist die Datenstruktur einer dokumentbasierten Datenbank grundlegend anders. Es gibt keine Relationen, Schemata oder Foreign-Key-Verknüpfungen. Alle zusammengehörenden Daten werden jeweils in Dokumenten gespeichert. Sehen wir uns ein Beispiel an.

Ein Onlineshop bietet Produkte zum Kauf an. In einer relationalen Datenbank gibt es deshalb (als Beispiel) drei Tabellen: products, customer, orders. Wenn ein Kunde nun eine Bestellung durchführt, werden seine persönlichen Daten zuerst in der Relation customer gespeichert. Nach Auswahl der Produkte, die aus der Tabelle products geholt werden, wird in der Tabelle orders seine Bestellung aufgenommen. Dort wird eine Referenz auf die Tabelle customer (customer_id) und eine Referenz auf die Tabelle products (products_id) zusätzlich zur Anzahl der Produkte gespeichert. Das Ganze geschieht im Schema s_orders. Soweit ist es nachvollziehbar. Ein Produkt könnte noch weitere Eigenschaften haben, die in einer weiteren Tabelle products_details gespeichert werden, wobei diese dann mit der Tabelle products über eine Foreign-Key-Beziehung verknüpft werden sollte. Diese Aufteilung von Daten nennt man im Übrigen Normalisierung.

In einer dokumentbasierten Datenbank sieht das Ganze etwas anders aus. Um die Produkte abzulegen, wird jeweils ein Dokument erstellt. Der große Unterschied zur Tabelle products in der relationalen Datenbank liegt in der Tatsache, dass die Produktdokumente unterschiedlich sein können. Zum Beispiel kann das eine Produktdokument ein Feld colour haben und das andere nicht. Das Feld würde nicht den Wert NULL annehmen, sondern wäre schlichtweg nicht vorhanden. Noch interessanter wird es dann beim Speichern der Bestellung. Auch eine Bestellung ist ein Dokument. Innerhalb dieses Dokuments werden alle Daten als keyvalue-Paare gespeichert: die persönlichen Daten des Kunden, die Produktinformationen und die Mengen der einzelnen Produkte und deren Preise. Es entsteht also ein monolithischer, aber theoretisch veränderbarer Datensatz bzw. besser ausgedrückt, ein Dokument.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -