lite - Mejor PHP DAL(capa de abstracción de datos) hasta ahora
php adodb recordcount (7)
¿Qué pasa con Zend_Db ? Lo único que para el almacenamiento en caché necesitas Zend_Cache, y el peso ligero es algo vago. Todos los otros requisitos son iguales, supongo.
¿Cuál es el mejor DAL de PHP (capa de abstracción de datos) desarrollado hasta ahora bajo cualquier proyecto de código abierto que podamos reutilizar con buena fe?
Me resulta difícil elegir un DAL para mi aplicación que admita suficientemente la abstracción de los sistemas de bases de datos más comunes (MySQL, PostgreSQL, MSSQL, Oracle, etc.) y es:
- ampliamente probado,
- tiene una buena interfaz (nombres de métodos legibles, buena estrategia para pasar parámetros),
- rápido,
- ligero,
- proporcionar caché (por ejemplo, se integra con Memcache o admite un buen mecanismo de almacenamiento en caché),
- licencia de código abierto,
- debe tener adaptadores para al menos MySQL / MySQLi (no basado en PDO)
Algunos de los libararios a tener en cuenta:
- PHPBB DAL http://wiki.phpbb.com/Database_Abstraction_Layer
- Joomla DAL http://api.joomla.org/Joomla-Framework/Database/JDatabase.html
- ADOdb http://phplens.com/adodb/
- Zend_db
- Doctrina (la desventaja solo soporta DOP_ *)
- Cualquier otro DAL usado / desarrollado bajo cualquier proyecto / sucursal de código abierto
Por favor, no considere:
- DOP
- Todos los ORM (sin embargo, Doctrine parece tener un DAL aparte además de ORM)
Doctrine 2.0 es la mejor en el mercado porque está soportada por los marcos superiores como el marco Zend, Symfony.
También soporta db nosql como mangodb, etc ...
Tiene un sistema de caché incorporado que puede mejorar la aplicación.
También tiene soporte de extensión como paginación, generador de consultas, etc.
Éstos son algunos de los resultados de bechmarks de propel y 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 los resultados de Doctrine 2.
ver los últimos dos registros de cómo el rendimiento ha aumentado con la doctrina 2.0 ...
He estado usando Zend_Db para mi aplicación web durante el último año. Creo que, Zend Framework es el mejor con diferencia.
Zend fue iniciado por personas que fueron los principales contribuyentes de PHP. (1)
ampliamente probado
Sí. Es utilizado por miles de proyectos y tiene una comunidad activa de desarrolladores.
tiene una buena interfaz (nombres de métodos legibles, buena estrategia de paso de parámetros)
Sí. Todos los componentes se pueden personalizar fácilmente según sus necesidades. Cada componente de Zend está acoplado de forma flexible, lo que significa que puede usar cualquier componente sin depender de ningún otro componente del marco.
velocidad
Sí. Zend_Db usando PDO, por defecto.
ligero
Sí
proporcionar caché (por ejemplo, se integra con memcache o admite un buen mecanismo de almacenamiento en caché)
Zend tiene un extenso sistema de almacenamiento en caché .
licencia de código abierto
Sí
Para acceder a una tabla de base de datos, todo lo que tiene que hacer es crear una clase para ella estableciendo el nombre de la tabla y su clave principal como sus 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
}
}
Esto se llama un modelo. En esta clase, puede crear todos los métodos relacionados con la entidad ''Usuario'', como agregar un nuevo usuario, editar el usuario, etc.
En su 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 . Verifique esta pregunta de relación para más información.
Si puedes hacerlo con PHP 5.3, te recomendaría mucho Doctrine DAL , está construido sobre PDO, para que obtengas el mismo rendimiento y una gran API.
Actualización: si Doctrine no es buena, puedes probar MDB2 . Tiene controladores para la mayoría de los RDBMS populares, una API robusta, excelentes documentos y una enorme base de usuarios:
- MySQL
- MySQLi (PHP5 solamente)
- PostgreSQL
- Oráculo
- Frontbase
- Interbase / Firebird (PHP5 solamente)
- MSSQL
- SQLite
Si solo necesita trabajar con MySQL, DALMP Database Abstraction Layer para MySQL usando PHP. puede ser una opción
funciona con cache / memcache / redis y también hace el manejo de sesiones muy simple y ligero.
Tuve algunos problemas con la doctrina DBAL, principalmente con la creación de esquemas / bases de datos / tablas, tenía muchos errores y parte de la documentación era diferente de las interfaces reales y los métodos de clase (sí leí la documentación de la versión correcta ). 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.