|
|
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」の執筆などを行う。
|
|
|
|