Подтвердить что ты не робот

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

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

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

  • широко протестировано,
  • имеет хороший интерфейс (читаемые имена методов, хорошая стратегия передачи параметров),
  • быстро,
  • легкий,
  • предоставление кеша (например, интегрируется с Memcache или поддерживает хороший механизм кэширования),
  • лицензия с открытым исходным кодом,
  • должны иметь адаптеры, по крайней мере, для MySQL/MySQLi (не для PDO)

Некоторые из рассмотренных libararies:

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

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

Ответ 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, а легкий - неопределенный. Все остальные требования совпадают, я думаю.