【 ここから本文 】
- TOP
- > Topics : データベース
- >
データベース
ソーシャルブックマークに登録 :
印刷用ページの表示
オープンソースDBの成熟度を計る[前編]
各製品の長所と短所を知り、採用・導入のシナリオを検討する
(2007年09月18日)
PostgreSQL http://www.postgresql.org/
エンタープライズ向け機能の拡充が加速
安定版:7.3、7.4/最新版:8.0、8.1、8.2/次期版:8.3
成り立ち
PostgreSQLは、1970年後半に米国カリフォルニア大学バークレー校(UCB)で開発された「Ingres」を遠い祖先とするRDBMSである。その後、「POSTGRES」「Postgres95」を経て、1996年にPostgreSQLバージョン6が発表され、同バージョンをベースとして機能強化が継続されて現在に至っている。
技術・機能の特徴
■MVCCを用いた高い同時実行性能
PostgreSQLは、データのハンドリングを追記型構造で実現している。レコードへの更新が発生した場合、更新対象のデータを直接書き換えず、更新後の新しいデータを更新ごとに追加していく仕組みだ。そのため、DELETE、INSERT、UPDATEの処理は以下のようになる。
DELETE:削除対象のデータはそのまま保持して、削除フラグを設定する
INSERT:挿入対象のデータを新たに追加する
UPDATE:更新前のデータにDELETE相当の、更新後のデータにINSERT相当の処理を行う
データ更新/削除の際にも旧データを消去しないため、例えば、更新トランザクションの実行中にも、参照トランザクションは旧データを参照し、待たされることなく実行され、一貫性のあるデータを取得できる。これにより、MVCC(MultiVersion Concurrency Control)を行うことが可能になっている。
しかしながら、一度記録されたレコードのデータが削除されることがないため、明示的にVACUUM(ガベージ・コレクション)を行う必要がある。従来、VACUUMの処理はPostgreSQL運用時の問題の1つだったが、バージョン8.1で正式に採用された自動VACUUM機能により、かなり改善された。
■ORDB由来のユニークな機能
PostgreSQLの前身であるUCB版POSTGRESは、オブジェクト指向の考えを取り入れて設計されている。そのうちのいくつかの特徴は、現在のPostgreSQLにも引き継がれている。
例えば、拡張可能な型システム、配列、テーブルの継承、DBオブジェクトごと(行含む)のOID(オブジェクトID)などだ。
大規模DB運用向けのテーブル・パーティショニングも、テーブルの継承を用いて実装されており、レンジとリストによる分割をサポートしている。同機能の強化として、バージョン8.1では、CE(Constraint Exclusion)が実装された。CHECK制約を使ってあるテーブルが特定の範囲のデータしか含まないことを明示的に宣言するもので、検索時の処理効率が向上する。なお、同機能は8.2でさらに改良が施されている。
■利便性を向上させるcontribライブラリ
PostgreSQLには、「contrib」というPostgreSQLのツール群をまとめたライブラリが用意されている。他のDBからの移行支援ツールや、他のDBを参照可能にするツール、暗号化ツールなど便利なものが多くそろっている。例えば、上で挙げた自動VACUUMは、もともとcontribに含まれていたものが、本体に標準採用された形となっている。
■ユーザー・コミュニティの充実と多大な貢献
日本PostgreSQLユーザ会(JPUG)は、黎明期からマルチバイト拡張用の日本語パッチ提供など、“本家”にさまざまな貢献を行ってきたメンバーも参加する、活発なユーザー・コミュニティである。近年では、ODBCの日本語化、バージョン8.0でのWindows対応、レプリケーション・ソフト「Slony I」および「pg-pool」などの貢献がある。また、多くのSIerが参加していることでも知られる。
加えて、ユーザー会によるドキュメント翻訳の量とスピードは、他のオープンソースDBの追随を許さないものがある。2006年2月より組織を特定非営利活動法人(NPO)に移管して、活動の幅をさらに広げている。
■エンタープライズ向け機能の充実
8.0以降、PostgreSQLでは、よりエンタープライズ用途を意識した性能向上、機能改善が行われている。例えば、7.4までDBクラスタは1台のハードディスク内の1つのディレクトリ配下にすべてのデータを保存しており、アクセスが集中するとディスクI/Oがボトルネックとなっていたが、8.0よりサポートされたテーブル・スペース機能により、複数のディスクにDB、テーブル、インデックスを分散配置できるようになった(図4)。
| 図4:PostgreSQLのデータ構造 |
最新版/次期版の強化ポイント
8.0の登場は2005年1月で、Windows対応をはじめ、テーブル・スペース、セーブ・ポイント、PITR(Point In Time Recovery)、アーカイブ・ログなどがサポートされた。同年11月にリリースされた8.1では、性能向上のほか、CE、データベース・ロール、ビットマップ・スキャン、自動VACUUMが機能に加わった。翌2006年12月には8.2がリリースされ、CEの拡張とマルチCPU(4CPU以上)対応が施された。
本稿執筆時点での最新バージョンは、2007年4月リリースの8.2.4。同バージョンでは、エンタープライズ向け機能(パーティショニング、テーブル・スペース、パフォーマンス、アーカイブ・ログを用いたウォーム・スタンバイ)が強化された。
次期版である8.3では、更新処理の性能を改善するHOT(Heap Only Tuples)、カーディナリティが低い値を効果的にインデックス化できるビットマップ・インデックス、Windows Vistaで採用されたJIS X 0213文字コードサポートなどを含んで、今夏にリリースされる見通しだ。
選ぶ理由と選ばない理由
PostgreSQLを積極的に選ぶ理由を羅列すると、豊富な機能、なかでもエンタープライズ向けの機能の充実ぶり、扱うSIerが多い、日本語情報の提供が迅速、開発やリリース自体が速いことが挙げられる。
一方、選ばない理由としては、Windowsにネーティブ対応してからさほど経過していないこと、開発やリリースの速さゆえ、バージョン選定が難しく、メンテナンスにも手間がかかる点、そして、高機能/大規模化が進んだことで、一から気軽に始めたいというユーザーにはやや敷居が高くなっていることが指摘されている。
各製品の長所と短所を知り、採用・導入のシナリオを検討する



