Лучший PHP DAL (уровень абстракции данных)
Каков лучший PHP DAL (уровень абстракции данных), который до сих пор разрабатывался в рамках любого проекта с открытым исходным кодом, который мы могли бы использовать с доброй волей?
Мне сложно выбрать DAL для моего приложения, которое достаточно поддерживает абстракцию для большинства распространенных систем баз данных (MySQL, PostgreSQL, MSSQL, Oracle и т.д.) и:
- широко протестировано,
- имеет хороший интерфейс (читаемые имена методов, хорошая стратегия передачи параметров),
- быстро,
- легкий,
- предоставление кеша (например, интегрируется с Memcache или поддерживает хороший механизм кэширования),
- лицензия с открытым исходным кодом,
- должны иметь адаптеры, по крайней мере, для MySQL/MySQLi (не для PDO)
Некоторые из рассмотренных libararies:
Пожалуйста, не учитывайте:
- PDO
- Все ORM (однако, Doctrine, похоже, имеет отдельный DAL, кроме ORM)
Ответы
Ответ 1
Если вы можете сделать с PHP 5.3, я бы очень рекомендовал Doctrine DAL, он был построен поверх PDO, поэтому вы получаете ту же производительность плюс отличный API.
Обновление: Если Doctrine не подходит, вы можете попробовать MDB2. У него есть драйверы для большинства популярных RDBMS, надежного API, отличных документов и огромной базы пользователей:
- MySQL
- MySQLi (только для PHP5)
- PostgreSQL
- Oracle
- Frontbase
- Interbase/Firebird (только для PHP5)
- MSSQL
- SQLite
Ответ 2
Я использую Zend_Db для своего веб-приложения в течение последних 1 года. Я думаю, Zend Framework является лучшим на сегодняшний день.
Zend был запущен людьми, которые были основными участниками PHP. (1)
широко протестировано
Да. Он используется тысячами проектов и имеет активное сообщество разработчиков.
имеет хороший интерфейс (читаемые имена методов, хорошие стратегия передачи параметров)
Да. Все компоненты могут быть легко настроены под ваши потребности. Каждый компонент в Zend слабо связан, что означает, что вы можете использовать любой компонент без какой-либо зависимости от любого другого компонента в рамках.
скорость
Да. Zend_Db с использованием PDO по умолчанию.
легкие
Да
обеспечение кеша (например, интегрируется с memcache или поддерживает хороший механизм кэширования)
Zend имеет обширную систему кэширования.
лицензия с открытым исходным кодом
Да
Чтобы получить доступ к таблице БД, все, что вам нужно сделать, это создать для нее класс, указав имя таблицы и ее первичный ключ в качестве своих полей.
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
}
}
Это называется моделью. В этом классе вы можете создать все методы, связанные с сущностью "Пользователь", такие как добавление нового пользователя, редактирование пользователя и т.д.
В коде приложения вы можете использовать это как
$u = new User();
$u->addNewUser('Name','Age','email');
Должен прочитать это - http://framework.zend.com/manual/en/zend.db.table.html
Больше ссылок здесь.
Этот вопрос вопрос для получения дополнительной информации
Ответ 3
Doctrine 2.0 - лучшая на рынке, потому что она поддерживается самыми высокими фреймворками, такими как Zend framework, Symfony.
Он также поддерживает nosql db, как mangodb и т.д.
У этого есть встроенная система кеша, которая может увеличить приложение.
Он также имеет поддержку расширения, такую как разбиение на страницы, построитель запросов и т.д.
Вот некоторые из bechmarks результатов propel и 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 |
Это ключевые наблюдения за результатами Doctrine 2.
см. последние две записи о том, как производительность увеличилась с помощью доктрины 2.0...
Ответ 4
У меня есть хороший опыт работы с Propel. Doctrine похож, я слышал хорошие вещи об этом, но у меня нет опыта.
Ответ 5
У меня были некоторые проблемы с доктриной DBAL, в основном с созданием схемы/базы данных/таблицы, она была ошибкой, а часть документации отличалась от реальных интерфейсов и методов класса (я прочитал документацию по правильной версии), мне пришлось использовать raw sql-заявления для некоторых из этих вещей.
Все остальное, казалось, было прекрасным, это был небольшой проект, поэтому я не использовал все функции, которые предоставляет доктрина DBAL.
Примечание:
Я сделал это год назад с последней стабильной версией доктрины DBAL и php, возможно, все эти проблемы уже исправлены.
Ответ 6
Как насчет Zend_Db? Единственное, что для кэширования вам нужен Zend_Cache, а легкий - неопределенный. Все остальные требования совпадают, я думаю.
Ответ 7
Если вам нужно только работать с MySQL, Уровень абстракции базы данных DALMP для MySQL с использованием PHP. может быть вариантом
работает с cache/memcache/redis, а также упрощает и облегчает обработку сеанса.