phpbar.de logo

Mailinglisten-Archive

[php] DB-Klassenbibliotheken

[php] DB-Klassenbibliotheken

Björn Schotte bjoern at thinkphphq.de
Don Dez 11 14:58:50 CET 2003


Hallo Wilfried,

Der CMS-Report wrote:
> Für ein Beratungsprojekt soll ich mich zum Thema Datenbank-Klassenbibliotheken äussern.
> Bei meinen Recherchen bin ich auf pear, ADOdb und dbx gestossen. 
> Welches dieser Systeme ist zukunftsträchtig - oder gibt es noch andere Bibliotheken?

PHPLIB::DB, PEAR::MDB, PEAR::MDB2, PEAR::DB, Metabase etc.

Allen ist gemein, dass sie bestimmte Vor- und Nachteile haben.
Während den PEAR-Klassen allgemein der Wasserkopf der (Über-)
Abstrahierung anhängt, ist zum Beispiel die PHPLIB::DB sehr
schlank und damit auch sehr performant. Außer der Emulierung
von Sequenzen (und intern in einem unserer Projekte auch den
transparenten Support von CLOBs und anderen Nettigkeiten) kann
sie halt nicht mehr.

Die Datenbankklassen auf PEAR sind darauf ausgelegt, möglichst
abstrakt zu sein und dementsprechend auch sehr viel von Datenbank-
"Eigenheiten" zu emulieren. Das macht sie unter Umständen sehr
langsam und man will sie eigentlich nicht wirklich auf Websites
mit sehr vielen Requests pro Sekunde einsetzen.

Dann gibt es auch noch einen Mittelweg, dessen Krönung das
Prinzip der DAOs wiedergibt.

Wenn man sich einmal betrachtet, dass wir es bei PHP/Web in den
meisten Fällen mit dem Request-Response-Prinzip (Client sendet
Anfrage, Webserver/PHP antwortet) zu tun haben, so ist es doch
eigentlich irrsinnig, für jeden Request Datenbank-Emulierungen
durchzuführen. Denn die darunter liegende Datenbank ändert sich
ja nicht pro Request, sondern man will den Abstraktionslayer meist
aus Wartungsfreundlichkeit und damit die Applikation auch unter
möglichst vielen verschiedenen (Kunden-)Datenbanken läuft.

Warum also nicht hier eine Mittelschicht einfügen? Pro Installation
weiß man doch, welche Datenbank eingesetzt wird. Und insbesondere
welche datenbankspezifischen *Features* man hier nutzen kann! D.h.
im Userland ruft man nicht mehr direkt SQL Queries auf, sondern
entsprechende Methoden (z.B. aus einer Factory, die je nach DB-Typ
eine andere Klasse zurückliefert, die den DB-spezifischen Code für
die jeweilige Anwendungsfunktionalität enthält), die dann die Datenbank-
Queries ausführen. Das kostet zwar zunächst mehr Arbeit 
(Abstrahierungsdenke in der Applikation, pro zu unterstützender 
Datenbank entsprechender Mehraufwand etc.pp.), sorgt aber dafür, dass
man sauber "landet".

Letztlich kommt es aber oft auf den einzelnen Anwendungsfall an. Ich
identifiziere also hier 3 Wege:

- small & cuddly: PHPLIB::DB
- ohne Mittelschicht, dafür mit dem Risiko zu viel abstrahieren zu
   müssen und zu viel emulieren zu lassen: entsprechende PEAR Klassen
- mit der Mittelschicht: entweder direkt die PHP-SQL-Befehle
   (mysql_query() etc.) aufrufen oder das einem leightweight
   Abstraktionslayer durchführen lassen.

Solltest du weitere Detailfragen haben, stehe ich dir gerne für
eine detaillierte Beratung zur Verfügung.

My 0,02 EUR, Björn.


php::bar PHP Wiki   -   Listenarchive