// der php hacker

// archiv

Objektdatenbanken in Webapplikationen

Geschrieben am 30. Dez 2008 von Cem Derin

databaseVor ein paar Tagen habe ich meine Zeitschriftensammlung aufgeräumt, dabei fiel mir eine Ausgabe des Linux Magazins wieder in die Hände, der ich bei Erscheinen nicht die nötige Aufmerksamkeit geschenkt habe. In dieser Ausgabe gab es eine Reihe von Artikeln rund um das Thema Datenbanken. Ausschlaggebend für den Text den ich hier schreibe ist aber der Artikel über db4o.

Nach dem ich den Artikel aufmerksam(er) gelesen hatte, malte ich mir eine PHP-Welt aus, in der Objekte direkt in die Datenbank geschrieben und aus ihr geladen werden können, dabei Referenzen und Integrität berücksichtigt und das ganze nativ in PHP abgefragt werden kann. Für Webapplikationen – wenn es denn so einfach geht wie mit db4o – wäre das eine erhebliche Arbeitserleichterung.

Was sind Objektdatenbanken?

Wem Objekdatenbanken (oder ODBMS) nicht sagen, für den möchte ich das Thema mal kurz umreissen: In der Welt von PHP kennen wir eigentlich nur relationale Datenbanken. In relationalen Datenbanken werden Daten in Tabellen mit einer festen Struktur hinterlegt, ggf. auf mehrere Tabellen aufgeteilt (Stichwort Normalisierung). Um diese Datenbanken abzufragen, gibt es eine einheitliche Sprache namens SQL (Structured Query Language).

Hier steht man vor einem Konflikt, wenn eine Applikation einem strengen objektorientierten Ansatz folgt. Objekte müssen wieder ein ein Datensatzschema geformt werden, damit diese wiederum in einer relationalen Datenbank abgelegt werden können. Vor dem selben Dilemma steht man, wenn man diese Daten wieder auslesen möchte. Das ganze verhält sich noch relativ simpel, wenn es um eindimensionale Objekte ohne Referenzen auf andere Objekte geht. Hat ein Objekt aber Referenzen auf wiederum andere Objekte, kann das Initialisieren eines Objekts inklusive Unterobjekte schnell zu einer hohen Anzahl an Datenbankabfragen führen.

Es gibt zwar in PHP verschiedene Pattern, die dieses Problem schon sehr gut in den Begriff bekommen – zum Beispiel ARP (Active Record Pattern) oder DAO (Data Access Object) – das speichern und laden der Objekte erfolgt aber immer noch über SQL und relational.

Objektdatenbanken schaffen hier eine Schnittstelle, um Objekte direkt in der Datenbank ablegen und auslesen zu können. In Objektorientierter Programmierung ist also eine Objektdatenbank anstrebenswert.

Objektdatenbanken für PHP

Ich habe zwar intensiv nach Objektdatenbanken für PHP gesucht, bin jedoch leider nicht fündig geworden. Daher ist dieser Text nur theoretisch. Ich habe zwar bereits mit einem in PHP implementierten Layer experimentiert, der Objekte generisch in relationale Datenbanken schiebt und ausliest. Das ganze ist jedoch alles andere als trivial. Wer weiß. Evtl. werde ich hier demnächst was vorstellen können.

Falls jemand Hinweise auf ODBMS für PHP findet, würde ich mich über eine kurze Rückmeldung freuen.

Einsatzgebiet Webapplikationen

Grade Webapplikationen, die in der Regel nur ein begrenztes Set an Daten pro Ansicht benötigen, würden sich für Objektdatenbanken perfekt eignen. Das ganze würde eine Reihe Vorteile mit sich bringen.

Wesentlich schnellere Entwicklung

Mehrere Elemente einer Applikation müssen nicht mehr Berücksichtigt werden: Speicher- und Lösch-Methoden müssen nicht mehr implementiert werden. Der Datenbanklayer kann theoretisch auch vernachlässigt werden, wenn das DMBS einen eigenen mitbringt. Theoretisch sollte jedoch ein Austausch möglich sein.

Keine Code-Vermischung

Ich höre oft, dass man HTML und PHP nicht vermischen sollte. Auch sollte man auf die Vermischung von HTML und JavaScript verzichten. Klar, es gibt für alles Möglichkeiten es auszulagern und prinzipiell teile ich diese Meinung auch. Aber in puncto SQL war das immer eher schwierig – ein Thema das mit ODBMS gegessen wäre.

Eine Sprache weniger, die erlernt werden muss

Stop. Jetzt gehen sicher einige Gemüter auf die Barrikaden. Wer PHP lernen will muss sich auch weiterhin mit HTML und SQL auseinandersetzen. Aber sind wir doch mal ehrlich: Meist hat man seine Präferenzen auf einer oder zwei dieser Sprachen. Aussagen will ich mit diesem Punkt eigentlich nur, dass es nicht mehr unbedingt nötig ist, die Sprache perfekt zu verstehen, wenn man weiß, wie man das ODBMS bedient.

Ausblick

Wie schon erwähnt, habe ich ein wenig mit einem PHP-Layer herumexperimentiert. Ich finde das Thema äußerst Interessant. Ich werde meine Experimente weiter Verfolgen und ggf. hier auch schon bald ein paar Ergebnisse zur Verfügung stellen können. Bis dahin werden aber doch noch ein paar Tage vergehen.

Nachtrag 30. Dezember 2008

Da stolper ich doch zufällig bei den Recherchen für einen anderen Artikel über das Persistenz-Konzept von Flow3 (der Kern des neuen Typo3). Die Herrschaften machen genau das, was ich eben beschrieben habe. Leider gibt es noch keine stabile Version von Flow3, aber man sollte das im Auge behalten.

Geschrieben in Entwicklung, Theorie Kommentieren

// kommentieren

// senden
theme von mir, software von wordpress, grid von 960 grid system. funktioniert in allen browsern, aber der safari bekommt das mit der schrift am schönsten hin.