Intereting Posts

Лучший PHP DAL (уровень абстракции данных) до сих пор

Каков наилучший PHP DAL (уровень абстракции данных), который до сих пор разрабатывался в рамках любого проекта с открытым исходным кодом, который мы могли бы использовать с доброй волей?

Мне трудно выбрать DAL для моего приложения, которое достаточно поддерживает абстракцию для большинства распространенных систем баз данных (MySQL, PostgreSQL, MSSQL, Oracle и т. Д.) И является:

  1. широко проверены,
  2. имеет хороший интерфейс (читаемые имена методов, хорошая стратегия передачи параметров),
  3. быстро,
  4. легкий,
  5. (например, интегрируется с Memcache или поддерживает хороший механизм кэширования),
  6. с открытым исходным кодом,
  7. должны иметь адаптеры для по крайней мере MySQL / MySQLi (не основанные на PDO)

Некоторые из них должны учитывать:

  • 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
  • Doctrine (поддержка только PDO_ *)
  • любой другой DAL, используемый / разработанный в рамках любого проекта / филиала с открытым исходным кодом

Пожалуйста, не учитывайте:

  • PDO
  • Все ORM (однако, как представляется, Doctrine имеет отдельный DAL, кроме ORM)

Если вы можете сделать это с PHP 5.3, я бы настоятельно рекомендовал Doctrine DAL , он построен поверх PDO, поэтому вы получаете такую ​​же производительность и отличный API.

Обновление: если Doctrine не подходит, вы можете попробовать MDB2 . У него есть драйверы для большинства популярных RDBMS, надежного API, отличных документов и огромной базы пользователей:

  • MySQL
  • MySQLi (только для PHP5)
  • PostgreSQL
  • оракул
  • Frontbase
  • Interbase / Firebird (только для PHP5)
  • MSSQL
  • SQLite

Я использую 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, а также очень удобна и легка в обработке сеансов.