Каков наилучший PHP DAL (уровень абстракции данных), который до сих пор разрабатывался в рамках любого проекта с открытым исходным кодом, который мы могли бы использовать с доброй волей?
Мне трудно выбрать DAL для моего приложения, которое достаточно поддерживает абстракцию для большинства распространенных систем баз данных (MySQL, PostgreSQL, MSSQL, Oracle и т. Д.) И является:
Некоторые из них должны учитывать:
Пожалуйста, не учитывайте:
Если вы можете сделать это с PHP 5.3, я бы настоятельно рекомендовал Doctrine DAL , он построен поверх PDO, поэтому вы получаете такую же производительность и отличный API.
Обновление: если Doctrine не подходит, вы можете попробовать MDB2 . У него есть драйверы для большинства популярных RDBMS, надежного API, отличных документов и огромной базы пользователей:
Я использую 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
Больше ссылок здесь . Проверьте этот вопрос отношения для получения дополнительной информации.
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 …
У меня хороший опыт работы с Propel . Доктрина похожа, я слышал хорошие вещи об этом, но у меня нет опыта.
У меня были некоторые проблемы с доктриной DBAL, в основном с созданием схемы / базы данных / таблицы, это было ошибкой, а некоторые из документации отличались от реальных интерфейсов и методов класса (я действительно читал документацию по правильной версии), мне приходилось использовать raw sql-инструкции для некоторые из этих вещей.
Все остальное, казалось, было прекрасным, это был небольшой проект, поэтому я не использовал все функции, которые предоставляет доктрина DBAL.
Примечание. Я делал это примерно год назад с последней стабильной версией доктрины DBAL и php, возможно, все эти проблемы уже исправлены.
Как насчет Zend_Db ? Единственное, что для кэширования вам нужен Zend_Cache, а легкий – неопределенный. Думаю, все остальные требования совпадают.
Если вам нужно только работать с MySQL, DALMP Database Abstraction Layer для MySQL с использованием PHP. может быть вариантом
работает с кешем / memcache / redis, а также очень удобна и легка в обработке сеансов.