web-dev-qa-db-fra.com

Meilleur PHP DAL (couche d'abstraction de données) jusqu'à présent

Quel est le meilleur PHP DAL (couche d'abstraction de données) développé à ce jour dans le cadre de tout projet open source que nous pourrions réutiliser de bonne foi?

Je trouve difficile de choisir un DAL pour mon application qui supporte suffisamment l'abstraction des systèmes de bases de données les plus courants (MySQL, PostgreSQL, MSSQL, Oracle, etc.) et est:

  1. largement testé,
  2. a une bonne interface (noms de méthode lisibles, bonne stratégie de passage de paramètres),
  3. vite,
  4. poids léger,
  5. fournir un cache (s'intègre par exemple à Memcache ou prend en charge un bon mécanisme de mise en cache),
  6. licence open source,
  7. devrait avoir des adaptateurs pour au moins MySQL/MySQLi (non basés sur PDO)

Quelques bibliothécaires à considérer:

Veuillez ne pas considérer:

  • AOP
  • Tous les ORM (cependant, Doctrine semble avoir un DAL distinct en plus de l'ORM)
24
sakhunzai

Si vous pouvez le faire avec PHP 5.3, je recommanderais vivement Doctrine DAL , il est construit au-dessus de PDO, donc vous obtenez les mêmes performances plus une excellente API.

Mise à jour: Si Doctrine n'est pas bon, vous pouvez essayer MDB2 . Il a des pilotes pour la plupart des SGBDR populaires, une API robuste, d'excellents documents et une énorme base d'utilisateurs:

  • MySQL
  • MySQLi (PHP5 uniquement)
  • PostgreSQL
  • Oracle
  • Frontbase
  • Interbase/Firebird (PHP5 uniquement)
  • MSSQL
  • SQLite
11
xmarcos

J'utilise Zend_Db pour mon application Web depuis 1 an. Je pense que Zend Framework est de loin le meilleur.

Zend a été lancé par des gens qui étaient les principaux contributeurs de PHP . (1)

largement testé

Oui. Il est utilisé par des milliers de projets et dispose d'une communauté active de développeurs.

a une bonne interface (noms de méthode lisibles, bonne stratégie de transmission de paramètres)

Oui. Tous les composants peuvent être facilement personnalisés selon vos besoins. Chaque composant de Zend est faiblement couplé, ce qui signifie que vous pouvez utiliser n'importe quel composant sans aucune dépendance à l'égard d'un autre composant du framework.

la vitesse

Oui. Zend_Db utilisant PDO, par défaut.

poids léger

Oui

fournir un cache (par exemple, s'intègre à memcache ou prend en charge un bon mécanisme de mise en cache)

Zend a un système de mise en cache étend .

licence open source

Oui

Pour accéder à une table de base de données, il vous suffit de créer une classe pour celle-ci en définissant le nom de la table et sa clé primaire comme ses champs.

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
    }
}

C'est ce qu'on appelle un modèle. Dans cette classe, vous pouvez créer toutes les méthodes liées à l'entité "Utilisateur" comme l'ajout d'un nouvel utilisateur, la modification d'un utilisateur, etc.

Dans votre code d'application, vous pouvez l'utiliser comme,

$u = new User();
$u->addNewUser('Name','Age','email');

Doit lire ceci - http://framework.zend.com/manual/en/zend.db.table.html

Plus de référence ici . Cochez cette question de relation pour plus d'informations

3

Si vous avez seulement besoin de travailler avec MySQL, DALMP Database Abstraction Layer for MySQL using PHP. peut être une option

fonctionne avec cache/memcache/redis et fait également une gestion de session très simple et légère.

2
nbari

J'ai eu quelques problèmes avec doctrine DBAL, principalement avec la création de schéma/base de données/table, c'était bogué et une partie de la documentation était différente des interfaces réelles et des méthodes de classe (j'ai lu right version documentation), j'ai dû utiliser des instructions SQL brutes pour certaines de ces choses.
Tout le reste semblait aller bien, c'était un petit projet donc je n'ai pas utilisé toutes les fonctionnalités doctrine DBAL fournit.

Remarque: je l'ai fait il y a environ un an avec la dernière version stable de doctrine DBAL et php, peut-être que tous ces problèmes sont résolus maintenant.

2
nimmen

J'ai une bonne expérience avec Propel . Doctrine est similaire, j'en ai entendu de bonnes choses mais je n'ai pas d'expérience.

2
Jorrit Schippers

Doctrine 2.0 est la meilleure du marché car elle est supportée par les frameworks les plus performants comme le framework Zend, Symfony.

Il prend également en charge nosql db comme mangodb etc ...

Il a un système de cache intégré qui peut booster l'application.

Il prend également en charge l'extension comme la pagination, le générateur de requêtes, etc.

Voici quelques-uns des principaux résultats de la propulsion et de la doctrine

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

Ce sont les observations clés pour les résultats Doctrine 2.

voir les deux derniers enregistrements comment les performances ont augmenté avec doctrine 2.0 ...

2

Qu'en est-il de Zend_Db ? La seule chose que pour la mise en cache vous avez besoin de Zend_Cache, et léger est une chose vague. Je suppose que toutes les autres exigences sont identiques.

1
Dmytro Zavalkin