Bisher bestes PHP DAL (Data Abstraction Layer). [closed]

Lesezeit: 8 Minuten

Benutzeravatar von sakhunzai
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:

  1. umfangreich getestet,
  2. hat eine gute Schnittstelle (lesbare Methodennamen, gute Parameterübergabestrategie),
  3. schnell,
  4. Leicht,
  5. Bereitstellen von Cache (z. B. integriert mit Memcache oder unterstützt einen guten Caching-Mechanismus),
  6. Open-Source-Lizenz,
  7. sollte mindestens Adapter für MySQL/MySQLi haben (nicht PDO-basiert)

Einige der zu berücksichtigenden Bibliotheken:

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

Benutzeravatar von xmarcos
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


Benutzeravatar von Lenin Raj Rajasekaran
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)

Zend hat eine umfangreiches Caching-System.

Open-Source-Lizenz

Ja

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');

Muss das lesen – http://framework.zend.com/manual/en/zend.db.table.html

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.

Benutzeravatar von Prashanth Pratapagiri
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

                               | Insert | findPk | complex| hydrate|  with  |
                               |--------|--------|--------|--------|--------|
                  PDOTestSuite |    132 |    149 |    112 |    107 |    109 |
             Propel14TestSuite |    953 |    436 |    133 |    270 |    280 |
        Propel15aLa14TestSuite |    926 |    428 |    143 |    264 |    282 |
             Propel15TestSuite |    923 |    558 |    171 |    356 |    385 |
    Propel15WithCacheTestSuite |    932 |    463 |    189 |    342 |    327 |
           Doctrine12TestSuite |   1673 |   2661 |    449 |   1710 |   1832 |
  Doctrine12WithCacheTestSuite |   1903 |   1179 |    550 |    957 |    722 |
            Doctrine2TestSuite |    165 |    426 |    412 |   1048 |   1042 |
   Doctrine2WithCacheTestSuite |    176 |    423 |    148 |    606 |    383 |

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 …

    – Stefan Steiger

    14. Februar 2017 um 11:38 Uhr

Wenn Sie nur mit MySQL arbeiten müssen, DALMP Database Abstraction Layer für MySQL mit PHP. kann eine Option sein

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

Benutzeravatar von Dmytro Zavalkin
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.

1430590cookie-checkBisher bestes PHP DAL (Data Abstraction Layer). [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy