Bisher bestes PHP DAL (Data Abstraction Layer). [closed]
Lesezeit: 8 Minuten
sakhunzai
Was ist die beste PHP-DAL (Datenabstraktionsschicht), die bisher im Rahmen eines Open-Source-Projekts entwickelt wurde und die wir in gutem Glauben wiederverwenden könnten?
Ich finde es schwierig, eine DAL für meine Anwendung auszuwählen, die die Abstraktion zu den meisten gängigen Datenbanksystemen (MySQL, PostgreSQL, MSSQL, Oracle usw.) ausreichend unterstützt und Folgendes ist:
umfangreich getestet,
hat eine gute Schnittstelle (lesbare Methodennamen, gute Parameterübergabestrategie),
schnell,
Leicht,
Bereitstellen von Cache (z. B. integriert mit Memcache oder unterstützt einen guten Caching-Mechanismus),
Open-Source-Lizenz,
sollte mindestens Adapter für MySQL/MySQLi haben (nicht PDO-basiert)
jede andere DAL, die unter einem Open-Source-Projekt/Zweig verwendet/entwickelt wird
Bitte nicht beachten:
PDO
Alle ORMs (Doctrine scheint jedoch neben ORM eine separate DAL zu haben)
@DrColossos, bitte sehen Sie sich meine Änderungen an. Ich denke, ORM ist zu viel OOPs für PHP in meinem Fall. Ich brauche nur aus den oben aufgeführten Gründen/Funktionen eine gute Abstraktion, danke
– sakhunzai
18. Oktober 2011 um 13:32 Uhr
Können Sie uns bitte erklären, warum Sie denken, dass eine objektorientierte DAL keine Lösung sein kann? Glauben Sie nicht, dass Ihre DAL-Liste nicht gepflegt wird und viele Dinge fehlen, nur weil sie kein OOP verwenden? Ich kenne keinen ernsthaften Programmierer, der heute eine gute DAL bauen und OOP ablehnen würde. Überprüfen Sie Zend_Db_Table (nicht nur Zend_Db).
– Regilero
23. Oktober 2011 um 10:12 Uhr
@regilero Ich habe nicht gesagt, dass ich OOPs basierte DAL nicht mag. Sie verstehen meine Frage nicht, als ich kein ORM sagte. ORM wird ausschließlich verwendet, wenn wir möchten, dass Geschäftsobjekte mit Datenbanktabellen gekoppelt sind. Beispielsweise ist Active Record ein Beispiel. Ich interessiere mich nicht für die Kopplung von Geschäftsobjekt und Datenbank. Ich möchte nur ein gutes DAL ohne ORM (Object Relational Mapping) Teil. Wenn Sie andere Bibliotheken vorschlagen können, sind Sie willkommen
– sakhunzai
24. Oktober 2011 um 8:31 Uhr
Ich bin hier nur neugierig, warum schließen Sie PDO aus? Es ist ein wirklich gutes System, und wenn der Roadmap-Plan eingehalten wird, sollte es der offizielle Standard-Datenbankmechanismus in PHP werden (mysql_ wird nach PECL deportiert, ebenso wie mysqli_).
– FMaz008
27. Oktober 2011 um 0:56 Uhr
Ich verstehe das PDO-Hass auch nicht. Können Sie Gründe angeben?
– New Stokes
27. Oktober 2011 um 19:40 Uhr
xmarcos
Wenn Sie mit PHP 5.3 auskommen, würde ich es sehr empfehlen Lehre DALes basiert auf PDO, sodass Sie die gleiche Leistung plus eine großartige API erhalten.
Aktualisieren: Wenn die Lehre nicht gut ist, können Sie es versuchen MDB2. Es hat Treiber für die meisten beliebten RDBMS, eine robuste API, großartige Dokumente und eine riesige Benutzerbasis:
MySQL
MySQLi (nur PHP5)
PostgreSQL
Orakel
Frontbasis
Interbase/Firebird (nur PHP5)
MSSQL
SQLite
Bitte lesen Sie die Frage richtig. Ich habe ausdrücklich erwähnt, dass PDO nicht empfohlen wird und Doctrine sich strikt an PDO_* hält und ich keinen Adapter für mysql/mysqli für Doctrine finden kann. Ich liebe es, Doctrine zu verwenden, wenn Sie auf mysql/mysqli adapter verweisen könnten, danke
– sakhunzai
24. Oktober 2011 um 12:15 Uhr
Tatsächlich abstrahiert Doctrine die PDO-API, sodass Sie benutzerdefinierte Treiber verwenden können, die diese Schnittstellen implementieren. (Verbindung und Erklärung).
– xmarcos
24. Oktober 2011 um 14:24 Uhr
Aus den Doctrine DBAL Docs: The fact that the Doctrine DBAL abstracts the concrete PDO API away through the use of interfaces that closely resemble the existing PDO API makes it possible to implement custom drivers that may use existing native or self-made APIs. For example, the DBAL ships with a driver for Oracle databases that uses the oci8 extension under the hood.
– xmarcos
24. Oktober 2011 um 14:25 Uhr
@sakhunzai, warum willst du nicht etwas, das auf PDO basiert? Einen solchen Grund sollten Sie hier und in Ihrer Frage wirklich skizzieren.
– Brad
25. Oktober 2011 um 20:46 Uhr
Niemand versucht Sie zu überzeugen, Sie können tun, was Sie wollen, wir versuchen nur, Ihnen dabei zu helfen, zu erkennen, dass Ihre Entscheidung fehlgeleitet sein könnte. In Bezug auf Ihr Beispiel besteht keine Notwendigkeit, die abzufragen INFORMATION_SCHEMAkönnen Sie verwenden DESCRIBE table_name um diese Informationen zu erhalten.
– xmarcos
29. Oktober 2011 um 21:05 Uhr
Lenin Raj Rajasekaran
Ich verwende Zend_Db seit einem Jahr für meine Webanwendung. Ich denke, Zend Framework ist bei weitem das Beste.
Zend wurde von Leuten gestartet, die die Hauptverantwortlichen für PHP waren.(1)
breit erprobt
Ja. Es wird von Tausenden von Projekten verwendet und hat eine aktive Community von Entwicklern.
hat eine gute Schnittstelle (lesbare Methodennamen, gute Parameterübergabestrategie)
Ja. Alle Komponenten können einfach an Ihre Bedürfnisse angepasst werden. Jede Komponente in Zend ist lose gekoppelt, was bedeutet, dass Sie jede Komponente ohne Abhängigkeit von einer anderen Komponente im Framework verwenden können.
Geschwindigkeit
Ja. Zend_Db verwendet standardmäßig PDO.
Leicht
Ja
Bereitstellen von Cache (z. B. integriert mit Memcache oder unterstützt einen guten Caching-Mechanismus)
Um auf eine DB-Tabelle zuzugreifen, müssen Sie lediglich eine Klasse dafür erstellen, indem Sie den Tabellennamen und seinen Primärschlüssel als Felder festlegen.
class User extends Zend_Db_Table {
protected $_name = "users"; //tablename
protected $_primary = "user_key"; //primary key column
function addNewUser($name,$age,$email) {
//Validate input and add Logic to add a new user
//Methods are available to insert data like $this->insert($data)
// where $data is an array of column names and values
// Check links below for documentation
}
}
Dies wird als Modell bezeichnet. In dieser Klasse können Sie alle Methoden im Zusammenhang mit der Entität „Benutzer“ erstellen, z. B. das Hinzufügen eines neuen Benutzers, das Bearbeiten von Benutzern usw.
In Ihrem Anwendungscode können Sie dies wie folgt verwenden:
$u = new User();
$u->addNewUser('Name','Age','email');
Mehr Referenz hier. Überprüfen Sie diese Beziehungsfrage für weitere Informationen
danke für die Details. Wie kann ich die Zend_DB (DAL) in meinem Projekt verwenden (natürlich ohne ganze Zend-Framework-Komponenten zu verwenden). Können Sie mir einen Link/Beispiel nennen?
– sakhunzai
24. Oktober 2011 um 8:35 Uhr
@sakhunzai hat weitere Details und Links in der Antwort hinzugefügt.
– Lenin Raj Rajasekaran
24. Oktober 2011 um 11:43 Uhr
Ich habe gute Erfahrung mit Treiben. Lehre ist ähnlich, ich habe Gutes darüber gehört, aber ich habe keine Erfahrung.
Ich hatte einige Probleme mit Doktrin DBAL, hauptsächlich mit der Erstellung von Schemas/Datenbanken/Tabellen, es war fehlerhaft und ein Teil der Dokumentation unterschied sich von den tatsächlichen Schnittstellen und Klassenmethoden (ich habe gelesen Rechts Versionsdokumentation), musste ich für einige dieser Dinge rohe SQL-Anweisungen verwenden.
Alles andere schien in Ordnung zu sein, es war ein kleines Projekt, also habe ich nicht alle Funktionen von Doktrin DBAL genutzt.
Hinweis: Ich habe es vor ungefähr einem Jahr mit der neuesten stabilen Version von Doktrin DBAL und PHP gemacht, vielleicht sind all diese Probleme inzwischen behoben.
Prashanth Pratapagiri
Doctrine 2.0 ist das beste auf dem Markt, da es von den besten Frameworks wie Zend Framework und Symfony unterstützt wird.
Es unterstützt auch nosql db wie mangodb etc…
Es hat ein eingebautes Cache-System, das die Anwendung beschleunigen kann.
Es bietet auch Erweiterungsunterstützung wie Paginierung, Abfrageerstellung usw
Hier sind einige der Benchmark-Ergebnisse von Antrieb und Lehre
Dies sind die wichtigsten Beobachtungen für die Ergebnisse von Lehre 2.
siehe die letzten beiden Aufzeichnungen, wie die Leistung mit Doktrin 2.0 gestiegen ist …
Danke, Ihre Ergebnisse scheinen wirklich vielversprechend zu sein, aber Sie verfehlen meinen Punkt. Gibt es einen Adapter ohne PDO für mysqli for Doctrine?
– sakhunzai
28. Oktober 2011 um 14:40 Uhr
@Prashanth Pratapagiri: Wenn Sie bereits Zahlen messen, wäre es gut zu schreiben, was diese Zahlen sind … Zeit für eine Einfügung? Zeit für X Einsätze? X Anzahl der Inserts pro Mal Y ? Weißt du, eine Zahl bedeutet nichts ohne eine Maßeinheit …
arbeitet mit cache/memcache/redis und macht auch das Session-Handling sehr einfach und leicht.
Danke, Ihre Ergebnisse scheinen wirklich vielversprechend zu sein, aber Sie verfehlen meinen Punkt. Gibt es einen Adapter ohne PDO für mysqli for Doctrine?
– sakhunzai
28. Oktober 2011 um 14:40 Uhr
@Prashanth Pratapagiri: Wenn Sie bereits Zahlen messen, wäre es gut zu schreiben, was diese Zahlen sind … Zeit für eine Einfügung? Zeit für X Einsätze? X Anzahl der Inserts pro Mal Y ? Weißt du, eine Zahl bedeutet nichts ohne eine Maßeinheit …
– Stefan Steiger
14. Februar 2017 um 11:38 Uhr
Dmytro Zawalkin
Wie wäre es mit Zend_Db? Das einzige, was man zum Caching braucht, ist Zend_Cache und leichtgewichtig, eine vage Sache. Alle anderen Anforderungen sind meiner Meinung nach erfüllt.
14305900cookie-checkBisher bestes PHP DAL (Data Abstraction Layer). [closed]yes
@DrColossos, bitte sehen Sie sich meine Änderungen an. Ich denke, ORM ist zu viel OOPs für PHP in meinem Fall. Ich brauche nur aus den oben aufgeführten Gründen/Funktionen eine gute Abstraktion, danke
– sakhunzai
18. Oktober 2011 um 13:32 Uhr
Können Sie uns bitte erklären, warum Sie denken, dass eine objektorientierte DAL keine Lösung sein kann? Glauben Sie nicht, dass Ihre DAL-Liste nicht gepflegt wird und viele Dinge fehlen, nur weil sie kein OOP verwenden? Ich kenne keinen ernsthaften Programmierer, der heute eine gute DAL bauen und OOP ablehnen würde. Überprüfen Sie Zend_Db_Table (nicht nur Zend_Db).
– Regilero
23. Oktober 2011 um 10:12 Uhr
@regilero Ich habe nicht gesagt, dass ich OOPs basierte DAL nicht mag. Sie verstehen meine Frage nicht, als ich kein ORM sagte. ORM wird ausschließlich verwendet, wenn wir möchten, dass Geschäftsobjekte mit Datenbanktabellen gekoppelt sind. Beispielsweise ist Active Record ein Beispiel. Ich interessiere mich nicht für die Kopplung von Geschäftsobjekt und Datenbank. Ich möchte nur ein gutes DAL ohne ORM (Object Relational Mapping) Teil. Wenn Sie andere Bibliotheken vorschlagen können, sind Sie willkommen
– sakhunzai
24. Oktober 2011 um 8:31 Uhr
Ich bin hier nur neugierig, warum schließen Sie PDO aus? Es ist ein wirklich gutes System, und wenn der Roadmap-Plan eingehalten wird, sollte es der offizielle Standard-Datenbankmechanismus in PHP werden (mysql_ wird nach PECL deportiert, ebenso wie mysqli_).
– FMaz008
27. Oktober 2011 um 0:56 Uhr
Ich verstehe das PDO-Hass auch nicht. Können Sie Gründe angeben?
– New Stokes
27. Oktober 2011 um 19:40 Uhr