PHPとその周辺のトピックをお届けするこのコラム。だいぶ間が空いてしまいましたが、今回からまたしばらく新しい話題をお届けしましょう。

これまでPHPが多くのWebアプリケーション開発者に支持され、普及してきた背景には、やはり「データベースとの連携が容易」であることが最大の要因として挙げられるでしょう。特に、「MySQL」と「PostgreSQL」の二大オープンソースデータベースは、PHPアプリケーション開発者にとって「必修課題」であると言っても過言ではありません。実際、仕事でPHPスクリプトを書いているエンジニアで、「SQLが全くわからない」という人はあまりいないはず。PHPにとって善き伴侶、または長年連れ添った空気のような存在。それが、MySQLでありPostgreSQLなのです。

しかし、伴侶というのはあまりに近しい関係であるが故に、時としてその変化を見失いがちなものです。我々がずっと当たり前のように使っているこれらのデータベースも、意識せぬ間にバージョンアップを繰り返し、気がついたときには機能も性能も「別人」のようになっていたりします。そこで、本シリーズではあらためてこれらのデータベースにスポットを当て、最新バージョンの新機能や改善点を紹介していきたいと思います。

まずは、PostgreSQLからいきましょう。

もともと「本格的なRDBMS」として豊富な機能と高い信頼性を誇ってきたPostgreSQLですが、最近のバージョンアップでは「性能」や「大規模対応」に関しても目覚ましい改善が重ねられています。2006年末にリリースされたバージョン8.2では、ソートやロック処理の改善による大幅な高速化を実現。続くバージョン8.3では、「Heap-Only Tuples (HOT)」と呼ばれる機能の追加により、追記型データベースの宿命である「表領域の肥大化」が軽減されました。その結果、苦手と言われ続けた「更新処理」の性能も大幅に向上していますので、もしもまだ「PostgreSQLは本格的だけど遅い」という古いイメージを持っていたら、早急に認識を改める必要があるでしょう。

すばらしいタイミングですが、最新バージョン「PostgreSQL 8.4」のベータテストが1月ほど前から行われており、大きな不具合が無ければ間もなく正式リリースが発表される見込みです。今回はデータベース本体の性能面には目立った改善はなく、運用の利便性や互換性、他のデータベースシステムからの移植性といった部分の改善が中心となっています。過去2回のメジャーバージョンアップと比較すると「地味」に見えるかもしれませんが、いくら性能が向上しても面倒な設定や専門家以外には不可能なチューニングが求められるようでは、現場では意味がありません。大切なのは、誰もが容易に扱えて、かつ高度にバランスした機能と性能が発揮できるようにすること。そういった点で、PostgreSQLは相変わらず着実に基礎体力を増強し、正常な方向に進化しているようです。

さて、個別の新機能の具体的な検証は次回から詳しく行うことにして、先に全体像をざっと俯瞰しておきましょう。PostgreSQL 8.4ベータテストの告知では、主に以下のような新機能がアナウンスされています。

  • Window関数による集計機能の強化
  • 共通表式「WITH」句と「WITH RECURSIVE」による再帰処理のサポート
  • 関数に可変長引数とデフォルト値が設定可能に
  • 並列リストア
  • 列単位の権限制御
  • データベース毎のロケール設定
  • ハッシュインデックスの高速化
  • EXISTS/NOT EXISTS問い合わせを用いた結合クエリを高速化
  • ウォームスタンバイが使いやすく
  • Free Space Mapの自動調整とVisibility MapによるVACUUM負荷の軽減
  • 旧バージョンのバックエンドに接続してもpsqlのバックスラッシュコマンドが使えるように
  • ユーザ認証のSSLサポート
  • 関数の実行時統計
  • psqlでの関数編集が容易に
  • 新しいcontribモジュール群

特に集計関数や再帰処理などは、SQLコーディングの煩雑さを大幅に軽減できそうな嬉しい機能です。どうぞ次回をお楽しみに。