TOP書籍連動> PDO(PHP Database Object)の特徴(3)




まるごと PHP!
まるごと PHP!

Part4:PDO(PHP Data Object)データベース抽象化レイヤクラス(3)

著者:岩切洋一(IWAKIRI, Yohichi)   2005/4/1
1   2  次のページ
PDO(PHP Database Object)の特徴(3)
性能の向上

   PDOの性能を、単純なINSERT処理を行って測定してみました。この結果は、図2、図3のとおりです。

図2:MySQLベンチマーク結果(INSERT)



図3:PostgreSQLベンチマーク結果(INSERT)



   Part4の第1回で紹介した図1のモジュールの位置付けと結果がほぼ一致しました。PDOでは、単純なSQLであれば、ネイティブドライバとほぼ同等の性能が出ているようです。実行性能が求められるケースでも、共通APIが提供されているPDOを利用すれば、異なるDBMSに対応できるスクリプトの作成が容易に行えるでしょう。また、プレースホルダを使ったケースでも性能はほとんど変わらないことがわかりました。対比としてPEAR::DBのプレースホルダを使ったケースでは、パラメータの正当性チェックや、エスケープ処理が行われるため、予想したとおり、プレースホルダを使用しないケースと比べ遅くなっていることもわかります。

   今回測定に用いたPostgreSQLはPREPARE文が実装されているので、これも一緒に測定してみました。結果を見ると、やはりPDOのprepare()メソッドは、プレースホルダとしての機能しか実装されていないことがわかります。

   以上の結果から、PDOモジュールの方向性は、PEAR::DBに非常に似かよっていますが、性能面も考慮すると、今後PHP5におけるデータベース抽象化レイヤの雄となることが予見できます。

コアモジュールとドライバモジュールの分離(1)

   PDOでは、コアモジュールとドライバモジュールが分かれたことにより、非常に柔軟なモジュール提供が可能になっています。モジュールのバージョンアップは主に次のように行われます(コラム「PHP拡張モジュールの提供方法」も参照)。

  • PHP拡張モジュールAPIの変更
    従来のネイティブドライバであればすべてがバージョンアップ対象。

  • DBMSクライアントライブラリのAPI追加・変更
    対象のライブラリに依存するモジュールが対象。
PHP拡張モジュールの提供方法

   PHPのモジュールは、2種類の方法で提供されています。1つは、本体とともに拡張モジュールとして提供する方法、もう1つは、PECL(PHP Extension Community Library)で提供する方法です。

   前者の方法で提供されているのは、必須モジュールや比較的利用頻度が高いモジュールです。それ以外のモジュールは、後者の方法で提供されています。次に、それぞれの提供方法の特徴を示します。

本体に含まれるモジュール
検証が十分に行われている。バージョンアップは本体のバージョンアップとともに行われる(個別に提供されることはない)。
PECL
単独パッケージとして配付される。pearコマンドでインストールとバージョン管理が行われる。PHPのバージョンアップとは非同期。

   この違いは、どういった点に影響するでしょうか?これまでのPHPのDBMS拡張モジュール(ネイティブドライバ)は本体に含まれているため、DBMSクライアントライブラリに変更があった場合でも、即座に対応バージョンが提供されるということはありませんでしたが、PECLで提供されるとなれば、タイムリーな提供を期待できます。

   しかし、PECLにも問題がないわけではありません。頻繁にバージョンアップが行われると、バージョン管理の問題や、PHP本体のバージョンとの整合性など、導入後のメンテナンスが面倒になるおそれがあります。

1   2  次のページ



著者プロフィール
著者:岩切洋一
「まるごとPHP!Vol.1(インプレス刊)」にて本記事「PDOデータベース抽象化レイヤクラス」の執筆や、「WEB+DB PRESS Vol.18(技術評論社刊)」にて「PEAR実践入門 第4章 使ってみよう!作ってみようPECL」の執筆などを行う。


この記事の評価をお聞かせください
ボタンをクリックしますとウインドウが開きます。

INDEX
Part4:PDO(PHP Data Object)データベース抽象化レイヤクラス(3)
PDO(PHP Database Object)の特徴(3)
  PDO(PHP Database Object)の特徴(4)
まるごと PHP!
Part1 PHP5のオブジェクト指向(1)
PHP5のオブジェクト指向(2)
PHP5のオブジェクト指向(3)
Part2 トライ!SQLite(1)
トライ!SQLite(2)
トライ!SQLite(3)
Part3 MySQL拡張サポート(1)
MySQL拡張サポート(2)
MySQL拡張サポート(3)
Part4 PDO(PHP Data Object)データベース抽象化レイヤクラス(1)
PDO(PHP Data Object)データベース抽象化レイヤクラス(2)
PDO(PHP Data Object)データベース抽象化レイヤクラス(3)
Part5 PHP5のXMLサポート(1)
PHP5のXMLサポート(2)
PHP5のXMLサポート(3)
Part6 PHP4からPHP5への移行のポイント