Mejor PHP DAL (capa de abstracción de datos) hasta el momento


22

¿Cuál es la mejor PHP DAL (capa de abstracción de datos) hasta ahora desarrollada bajo cualquier proyecto de código abierto que pudimos reutilizar con buena fe?

Me resulta difícil elegir un DAL para mi aplicación que suficiente soporte a la abstracción de los sistemas de bases de datos más comunes (MySQL, PostgreSQL, MSSQL, Oracle, etc) y es:

  1. ampliamente probado,
  2. tiene buena interfaz (nombres de los métodos de lectura, una buena estrategia de paso de parámetros),
  3. rápido,
  4. ligero,
  5. proporcionar caché (por ejemplo, se integra con Memcache o es compatible con una buena cachi mecanismo ng),
  6. licencia de código abierto,
  7. debe tener adaptadores para al menos MySQL/MySQLi (no PDO base)

Algunos de los libararies a considerar:

Por favor, no tienen en cuenta:

  • DOP
  • Todos los ORM (sin embargo, Doctrine parece tener un DAL aparte de ORM)
+1

@DrColossos, por favor vea mis ediciones. Creo que ORM es demasiados OOPs para php en mi caso. Solo necesito una buena abstracción solo por razones/características enumeradas arriba, gracias 18 oct. 112011-10-18 13:32:33

+2

¿podría explicarnos por qué cree que un DAL orientado a objetos no puede ser una solución? ¿No cree que su lista de DAL no se mantiene y le faltan muchas cosas solo porque no usan OOP? No conozco ningún programador serio que construya un buen DAL hoy y rechace OOP. Compruebe Zend_Db_Table (no solo Zend_Db). 23 oct. 112011-10-23 10:12:57

  0

@regilero No dije que no me gusta el DAL basado en OOP. No recibes mi pregunta cuando digo que no hay ORM. ORM se usa estrictamente cuando queremos objetos comerciales junto con una tabla de base de datos ... por ejemplo, Active Record es un ejemplo. No estoy interesado en el acoplamiento de objeto de negocio + base de datos. Solo quiero un buen DAL sin la parte ORM (Mapeo relacional de objetos). Si tienes otra guía para sugerir que seas bienvenido 24 oct. 112011-10-24 08:31:22

+7

Tengo curiosidad aquí, ¿por qué excluyes PDO?Es un sistema realmente bueno, y si se respeta el plan de la hoja de ruta, debería convertirse en el mecanismo de base de datos predeterminado oficial en PHP (mysql_ será deportado a PECL, y también lo hará mysqli_) 27 oct. 112011-10-27 00:56:35

+5

No entiendo que la PDO odie tampoco. ¿Puedes dar razones? 27 oct. 112011-10-27 19:40:44

  0

Llegué aquí para leer cuál es el estado de Pear: DB. Fue muy famoso una vez. No tiene mención aquí. ¿Cualquier razón? 22 oct. 132013-10-22 07:13:43

  0

Nunca usé eso, en el horizonte creo que Doctrine y Zend DB son buenas opciones. Como puede leer los otros comentarios, PDO también es una buena opción, probablemente uno de los mejores si desea usar el mismo estándar 22 oct. 132013-10-22 10:13:54

2

Tengo buena experiencia con Propel. Doctrine es similar, escuché cosas buenas al respecto, pero no tengo experiencia.

+1

Propel es un ORM. 28 oct. 112011-10-28 23:38:44


9

Si puede hacer con PHP 5.3, recomendaría Doctrine DAL, está construido sobre PDO, por lo que obtiene el mismo rendimiento más una API excelente.

Actualización: Si Doctrine no es bueno, puede intentar MDB2.Tiene controladores para la mayoría de los RDBMS populares, una API robusta, grandes documentos y una gran base de usuarios:

  • MySQL
  • MySQLi (PHP5 solamente)
  • PostgreSQL
  • Oracle
  • Frontbase
  • Interbase/Firebird (sólo PHP5)
  • MSSQL
  • SQLite
+1

lea la pregunta correctamente. He mencionado explícitamente que no se recomienda PDO, y Docttrine se adhiere a PDO_ * rígidamente y no puedo encontrar un adaptador para mysql/mysqli para Doctrine. Me encantaría usar Doctrine si pudieras señalar el adaptador mysql/mysqli, gracias 24 oct. 112011-10-24 12:15:00

  0

En realidad, Doctrine abstrae la API de PDO para que puedas usar controladores personalizados que implementen esas interfaces. (Conexión y declaración). 24 oct. 112011-10-24 14:24:29

  0

de la doctrina DBAL Docs: 'El hecho de que la Doctrina DBAL abstrae la API de PDO concreta de distancia mediante el uso de interfaces que se parecen mucho a la API de PDO existente hace posible la implementación de controladores personalizados que pueden usar existente nativo o hecho a sí mismo APIs Por ejemplo, el DBAL se envía con un controlador para bases de datos Oracle que usa la extensión oci8 bajo el capó. 24 oct. 112011-10-24 14:25:47

  0

está previsto el soporte de mysqli, pero por el momento parece que no hay un adaptador. He actualizado la respuesta con un DBAL alternativo. 24 oct. 112011-10-24 14:36:27

  0

MDB2 parece estar en activo durante un año casi ('2.5.0b3 (beta) fue lanzado el 2010-08-29') y búsqueda en Internet no muestra ninguna buena historia comparable con otros competidores 24 oct. 112011-10-24 15:18:40

  0

Eso puede ser porque simplemente funciona, MDB2 tiene todas las funciones que necesitará, incluida la emulación de características específicas del controlador (es decir, la secuencia en MySQL). Sin embargo, sí estoy de acuerdo en que no actualizarme es desalentador, es por eso que me he mudado a Doctrine. 24 oct. 112011-10-24 21:27:27

+3

@sakhunzai, ¿por qué no quieres algo basado en PDO? Deberías describir realmente tal razón aquí, y en tu pregunta. 25 oct. 112011-10-25 20:46:51

  0

@Brad gracias, Por lo que yo sé DOP no proporciona 'SQL especial features' específica a RDBMS y en un sentido como su envoltorio para las características más comunes disponibles alrededor de todo el RDBMS o dicen que' denominator' común 28 oct. 112011-10-28 08:42:16

  0

@sakhunzai, el SQL pasa. Puede usar funciones SQL especiales todo lo que desee. Es cierto que las funciones API específicas que no usan SQL podrían no estar disponibles, pero nunca me encontré con un problema, al menos con MySQL. Todo lo que necesitaba estaba disponible con SQL. Si realmente crees que tienes un problema, debes investigar el problema específico. Sospecho que hay una forma SQL de acceder a lo que creas que necesitas. 28 oct. 112011-10-28 15:04:26

  0

@Brad gracias, ¿qué hay de las funciones de lectura de esquema, por ejemplo, 'mysql_field_type()'? ¿Qué sugieres para lograr esto en PDO? 28 oct. 112011-10-28 16:30:34

  0
  0

Usted tiene una gran idea errónea acerca de la forma en que todo esto funcione. PDO es una * INTERFAZ * normalizada, lee que usas la misma API sin importar el back-end DB que elijas. El cambio es la falta de características específicas del proveedor, por eso hay más DBAL repletos de funciones que funcionan * además de PDO *, como Doctrine. 28 oct. 112011-10-28 20:31:02

  0

Con respecto a 'mysql_field_type', tiene http://www.doctrine-project.org/docs/dbal/2.1/en/reference/schema-manager.html en Doctrine. 28 oct. 112011-10-28 20:32:23

  0

@xmarcos, @ Brad gracias Pero aún no estoy convencido :), y no tengo ideas erróneas sobre PDO_ *. En el caso de 'mysql_field_type (resource $ result, int $ field_offset)', simplemente pasamos el 'resource' y obtenemos la información del esquema de la tabla sin consultar el' esquema de información'. En el caso de DAL, por ejemplo, Doctrine o PDO, no veo cómo sucederá esto, excepto que lea la información del esquema directamente como sugirió @xmarcos. 29 oct. 112011-10-29 02:28:04

+1

Ningún cuerpo está tratando de convencerte, puedes hacer lo que quieras, solo estamos tratando de ayudarte a darte cuenta de que tu decisión puede estar equivocada. En cuanto a su ejemplo, no es necesario consultar 'INFORMATION_SCHEMA', puede usar' DESCRIBE table_name' para obtener esa información. 29 oct. 112011-10-29 21:05:28

  0

referencia aquí http://dev.mysql.com/doc/refman/5.0/es/describe.html 29 oct. 112011-10-29 21:09:17


1

¿Qué hay de Zend_Db? Lo único que necesita para almacenar en caché es Zend_Cache, y el peso ligero es algo vago. Todos los demás requisitos coinciden, supongo.


3

He estado utilizando Zend_Db para mi aplicación web durante los últimos 1 año. Creo que Zend Framework es de lejos el mejor.

Zend fue creado por personas que fueron los principales contribuidores de PHP. (1)

ampliamente probados

Sí. Es utilizado por miles de proyectos y tiene una comunidad activa de desarrolladores.

tiene buena interfaz (nombres de los métodos de lectura, una buena estrategia que pasa parámetro)

Sí. Todos los componentes se pueden personalizar fácilmente según sus necesidades. Todos los componentes en Zend están ligeramente acoplados, lo que significa que puede usar cualquier componente sin ninguna dependencia de ningún otro componente en el marco.

velocidad

Sí. Zend_Db usando PDO, por defecto.

ligera

proporcionar caché (por ejemplo integra con memcache o soporta un buen mecanismo de caché)

Zend tiene un extensive caching system.

-licencia de código abierto

Para acceder a una tabla de base de datos, todo lo que tiene que hacer, es crear una clase para ello estableciendo el nombre de la tabla y su clave primaria como su campos.

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

Se llama modelo. En esta clase, se pueden crear todos los métodos relacionados con la entidad 'Usuario' como añadir un nuevo usuario, la edición de usuario, etc.

en el código de aplicación, puede utilizar esto como,

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

debe leer esto - http://framework.zend.com/manual/en/zend.db.table.html

Más referencia here. Marque esta relation question para más información

  0

gracias por la details.How ¿Puedo usar el Zend_Db (DAL) en mi proyecto (de curso sin necesidad de utilizar toda Zend componentes del marco).¿Podría indicarme un enlace/ejemplo 24 oct. 112011-10-24 08:35:24

  0

@sakhunzai agregó más detalles y enlaces en la respuesta ... 24 oct. 112011-10-24 11:43:52


2

que tuvo algunos problemas con la doctrina DBAL, sobre todo con la creación del esquema/base de datos/mesa, fue buggy y algunos de documentación era diferente de las interfaces y métodos de la clase real (He leído derecha documentación de la versión), tuve que usar sentencias raw sql para algunas de esas cosas.
Todo lo demás parecía estar bien, era un proyecto pequeño, así que no usé todas las características que proporciona la doctrina DBAL.

Nota: Lo hice hace aproximadamente un año con la última versión estable de la doctrina DBAL y php, tal vez todos esos problemas ya están solucionados.


3

Doctrine 2.0 es el mejor en el mercado porque es compatible con los frameworks más avanzados como Zend framework, Symfony.

También es compatible con db nosql como mangodb etc ...

Tiene sistema de caché incorporado que puede impulsar la aplicación.

También está teniendo el apoyo de extensión como la paginación, el generador de consultas, etc.

Éstos son algunos de los parámetros de evaluación de los resultados de propulsión y la doctrina

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

Estas son las observaciones clave para la Doctrina 2 resultados.

ver los dos últimos discos de cómo el rendimiento se ha incrementado con la doctrina 2,0 ...

  0

gracias sus resultados parecen muy prometedores pero extraña mi punto. ¿Hay algún adaptador no pdo disponible para mysqli para Doctrine? 28 oct. 112011-10-28 14:40:28

  0

@Prashanth Pratapagiri: Si ya hace el trabajo de medir números, sería bueno escribir cuáles son esos números ... ¿Es hora de insertar? ¿Tiempo para X insertos? X Número de insertos por tiempo Y? Ya sabes, un número no significa nada sin una unidad de medida ... 14 feb. 172017-02-14 11:38:32


1

Si sólo necesita para trabajar con MySQL, DALMP Database Abstraction Layer for MySQL using PHP. puede ser una opción

obras con cache/memcache/Redis y también hace que la sesión sea muy simple y ligera.

  0

parece ser una buena opción ligera, gracias por el enlace 23 dic. 132013-12-23 06:30:41