web-dev-qa-db-ja.com

これまでで最高PHP DAL(データ抽象化レイヤー))

善意で再利用できるオープンソースプロジェクトの下でこれまでに開発された最高のPHP DAL(データ抽象化層))は何ですか?

ほとんどの一般的なデータベースシステム(MySQL、PostgreSQL、MSSQL、Oracleなど)への抽象化を十分にサポートする私のアプリケーション用のDALを選択するのは難しいと思います。

  1. 広くテストされ、
  2. 優れたインターフェース(読み取り可能なメソッド名、適切なパラメーター受け渡し方法)、
  3. 速い、
  4. 軽量、
  5. キャッシュを提供する(例:Memcacheと統合する、または適切なキャッシュメカニズムをサポートする)
  6. オープンソースライセンス、
  7. 少なくともMySQL/MySQLi(非PDOベース)用のアダプターが必要

考慮すべき図書館の一部:

考慮しないでください:

  • PDO
  • すべてのORM(ただし、DoctrineはORMの他に個別のDALを持っているようです)
24
sakhunzai

PHP 5.3でできる場合は、 Doctrine DAL を強くお勧めします。PDOの上に構築されているため、同じパフォーマンスと優れたAPIが得られます。

更新:Doctrineが良くない場合は、 MDB2 を試すことができます。ドライバがあります。人気のあるRDBMSのほとんど、堅牢なAPI、優れたドキュメント、および巨大なユーザーベース:

  • MySQL
  • MySQLi(PHP5のみ)
  • PostgreSQL
  • オラクル
  • フロントベース
  • Interbase/Firebird(PHP5のみ)
  • MSSQL
  • SQLite
11
xmarcos

私は過去1年間、私のWebアプリケーションにZend_Dbを使用しています。 Zend Frameworkは断然最高だと思います。

Zendは、PHPの中心的な貢献者である人々によって開始されました。 (1)

広くテストされた

はい。何千ものプロジェクトで使用されており、活発な開発者コミュニティがあります。

優れたインターフェース(読み取り可能なメソッド名、優れたパラメーター受け渡し方法)

はい。すべてのコンポーネントは、ニーズに合わせて簡単にカスタマイズできます。 Zendのすべてのコンポーネントは疎結合です。つまり、フレームワーク内の他のコンポーネントに依存することなく、任意のコンポーネントを使用できます。

速度

はい。デフォルトでは、PDOを使用したZend_Db。

軽量

はい

キャッシュを提供する(たとえば、memcacheと統合するか、適切なキャッシュメカニズムをサポートする)

Zendには 拡張キャッシングシステム があります。

オープンソースライセンス

はい

DBテーブルにアクセスするには、テーブル名とその主キーをフィールドとして設定することで、DBテーブルにクラスを作成するだけです。

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
    }
}

これはモデルと呼ばれます。このクラスでは、新しいユーザーの追加、ユーザーの編集など、「User」エンティティに関連するすべてのメソッドを作成できます。

アプリケーションコードでは、これを次のように使用できます。

$u = new User();
$u->addNewUser('Name','Age','email');

これを読む必要があります- http://framework.zend.com/manual/en/zend.db.table.html

詳細リファレンス こちら 。詳細については、これをチェックしてください 関係の質問

MySQLでのみ作業する必要がある場合は、 PHPを使用するMySQLのDALMPデータベースアブストラクションレイヤー をオプションにすることができます。

cache/memcache/redisで動作し、セッション処理も非常にシンプルで軽量です。

2
nbari

doctrine DBAL、主にスキーマ/データベース/テーブルの作成に問題があり、バグが多く、一部のドキュメントが実際のインターフェースやクラスメソッドとは異なっていました(私は読んだバージョンのドキュメント)、それらのいくつかのために生のSQLステートメントを使用する必要がありました。
それ以外はすべて問題ないようでした。それは小さなプロジェクトだったので、doctrine DBALが提供するすべての機能を使用しませんでした。

注:私は1年ほど前にdoctrine DBALとphpの最新の安定バージョンを使用してそれを行いました。おそらく、これらの問題はすべて今までに修正されています。

2
nimmen

Propel の使用経験は豊富です。 Doctrine も同様ですが、良いことは聞きましたが、経験がありません。

2

Doctrine 2.0は、Zendフレームワーク、Symfonyなどの最上位のフレームワークでサポートされているため、市場で最高のものです。

Mangodbなどのnosql dbもサポートしています...

それはアプリケーションを後押しすることができる作り付けのキャッシュシステムを持っています。

また、ページネーション、クエリビルダーなどの拡張機能のサポートもあります

ここでは、推進と教義のベンチマーク結果の一部を示します。

                               | 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の結果の主要な観察結果です。

doctrine 2.0 ...でパフォーマンスがどのように向上したか、最後の2つのレコードを見てください...

Zend_Db はどうですか?キャッシュするためにZend_Cacheが必要なのは軽量で、あいまいなことだけです。他のすべての要件は一致していると思います。

1
Dmytro Zavalkin