Mailinglisten-Archive |
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