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)