オープンソースDBの成熟度を計る[前編]

企業でのオープンソース・ソフトウェアの利用が活発化している昨今、データ活用の基盤となるデータベースにおいても、オープンソースのRDBMS(リレーショナル・データベース管理システム)が採用されるケースが増えてきている。だが、自社の業務内容やITシステムの状況に合致する製品の選定、導入は決して易しいプロセスではない。前編となる今回は、代表的なオープンソースDBについて、その特徴や最新版の技術・機能の成熟度について見ていく。

木村明治
キムラデービー 代表

オープンソースDBの成熟度とプレゼンス

 日本国内のユーザーにおいて代表格とされるオープンソースDBと言えば、「PostgreSQL」と「MySQL」がまず思い浮かぶが、これら以外にもさまざまなDBが存在している。両DBと同じC/C++ベースでは、「Firebird」「Ingres」「SQLite」「Berkley DB」などがあり、Javaベースでは「Apache Derby(Java DB)」「HSQLDB」「H2」などがある。

 これらのうち、自社での利用に適したオープンソースDBはどれなのかを検討する際の指標として、野村総合研究所(NRI)が2006年8月に公開した「NRIオープンソースマップ」を紹介したい(図1)。これは、企業システムでの採用実績がある計24のオープンソース・ソフトウェアを、成熟度とプレゼンスという2軸での評価でマッピングしたものだ。

ossdb_1_thumb.jpg 図1:NRIオープンソースマップ
*資料:野村総合研究所(NRI)「NRIオープンソースマップ」(2006年8月発表)http://www.nri.co.jp/news/2006/060808_1.html

 このNRIオープンソースマップでは5つのオープンソースDB (MySQL、PostgreSQL、Firebird、Ingres、Apache Derby)が取り上げられており、NRIの評価はいずれも「企業システムで使えるレベル」(成熟度、プレゼンス共に3ポイント以上)である。有名なMySQLとPostgreSQLはまだしも、他の3製品については、オープンソースDBとして登場したのがここ数年のことなのに、なぜ、成熟度についても一定の評価を得ているのかという点に疑問を持たれるかもしれない。

 新興のオープンソースDBにもこうした評価がなされた理由は、それらの「成り立ち」に起因する。これらは商用のRDBMS製品を源としてオープンソース化された(IngresとApache Derby)、もしくは商用製品から分岐した(Firebird)ものなのである。なお、主要なオープンソースDBの歴史については図2を参照されたい。

 最近では、いずれのオープンソースDBも、基本的にSQLの標準を意識した作りになっており、機能面での差異は小さくなる傾向にある。しかしながら、その成り立ちや開発ポリシー、プロセスの違いにより、それぞれ独自の特徴も少なくない。以下、主要なオープンソースDBについて、それぞれの最新バージョンをベースに、特徴や技術および機能面での成熟度について見ていくことにする。

ossdb_2_thumb.jpg
図2:主要なオープンソースDBの歴史

MySQL http://www.mysql.com/
群を抜く利用実績でLAMPの普及に貢献
安定版:4.1.x、4.0.x、3.23.x/最新版:5.0.x/次期版:5.1、6.0

成り立ち

 MySQLは、スウェーデンのMySQLの創業者が開発したRDBMSで、1995年にバージョン1.0が公開された。その後も開発が続けられ現在に至る。Webアプリケーション構築時の標準的なプラットフォームを意味するLAMP(Linux、Apache、MySQL、PHP/Perl/Pythonの頭文字を並べたもの)に含まれるほど有名である。

技術・機能の特徴

■プラグイン形式のストレージ・エンジン

 MySQLではストレージ・エンジンをプラグインの形で利用でき、データの格納方法や処理方法の異なるテーブル・タイプを選択することができる(表1)。現在、MySQLで主に使われているストレージ・エンジン/テーブル・タイプは「MyISAM」と「InnoDB」である。トランザクション処理が必要な場合はInnoDB型テーブル、一時テーブルはMemory型テーブル、それ以外はMyISAM型テーブルを用いるのが一般的だ。それ以外のテーブル・タイプは用途に応じて選択することになる。

ossdb_3_thumb.jpg
表1:MySQLに付属するテーブル・タイプ

 MySQLをMyISAMで使うとトランザクション機能などは使えないが、その分、内部処理の仕組みがシンプルで、検索/更新速度が速い。同エンジンは特に、参照の頻度が高いWebアプリケーションで採用されることが多い。

 なお、トランザクションをサポートしているInnoDB、そして「Berkeley DB」が共にOracleに買収されたため、MySQLは「Falcon」と呼ばれるトランザクション対応の自社ストレージ・エンジンを開発中で、次期バージョンにおいて正式採用される予定となっている。

■GNU GPLと商用のデュアル・ライセンス

 MySQLでは、GNU GPLと有料の商用ライセンスであるFPL(MySQL Free Public License)の2種類のライセンスが用意されている。GNU GPLの範囲内で利用するかぎり無料で、MySQLをベースに構築したアプリケーション製品の販売のようなビジネスを展開しても問題とならない。

 MySQLを製品やシステムに組み込みたいが、それをGNU GPLとして公開したくない場合は、MySQLから商用ライセンスのFPLを購入する必要がある。このように、適用形態によっては無料にならない場合もあるので注意が必要だ。

■レプリケーション機能を標準装備

 MySQLは、標準でシングル・マスタの非同期レプリケーション機能を備えている(図3)。シングル・マスタのため、マスタは1台に限定され、非同期レプリケーションであるゆえ、マスタからスレーブへのコピーには遅延が生じる。だが、スレーブ台数を増やすことにより手軽に参照系のスケールアウトが行える。Webシステムでは、構築時は小さく始めて、その後、徐々に拡張するスタイルが多いが、その際に便利な機能だ。

ossdb_4.jpg
図3:MySQLに備わる、シングル・マスタ非同期レプリケーション機能

■SQL独自拡張

 MySQLには、便利な独自拡張がいくつかあり、それを前提としてMySQLを採用しているアプリケーションが多く存在する。以下はその主な例である。

●DDL(データ定義言語)の独自拡張

  • TIMESTAMP:行の挿入・更新日時を自動的に反映させる
  • AUTO_INCREMENT:手軽にユニークな連番を取得し、格納できる

●DML(データ操作言語)の独自拡張

  • REPLACE:行がなければINSERT、行があればREPLACEする機能。
  • INSERT:1行に複数のINSERTする値を記述できるバルク・インサート機能。PostgreSQLにおいてもバージョン8.2から実装されている

最新版/次期版の強化ポイント

 MySQL 5.0.0の登場は2003年12月で、2005年10月の5.0.15で安定版(stable)となる(同DBではアルファ版からバージョン番号がつき、stable〈GA〉が通常のリリースに相当する)。本稿執筆時点(2007年5月)での最新バージョンは5.0.41だ。5.0.27以降、 MySQLは「Community Server」と「Enterprise Server」の2系統に分かれた形でリリースされている(コラム「Community ServerとEnterprise Server」を参照)。

 次期バージョンの5.1では、更新可能なビュー、トリガの拡張、フル・アウタージョイン、制約(InnoDBでは3.xで対応済み)、クラスタリング、パーティショニング、プラグイン形式のストアド・エンジンAPI、行ベースのレプリケーションなど、これまで商用DBと比較して不足していたエンタープライズ系の機能が数多く備わることとなる。特にサーバ・サイド・プログラミング機能が強化され、これまで、MySQLに適用することが難しかったビジネス・ロジックをサーバ・サイドに置くようなシステムへの対応が可能になっている。

選ぶ理由と選ばない理由

 MySQLを選ぶ有力な理由としては、WebのバックエンドDBとしての実績・事例が非常に豊富であること、レンタル・サーバなどで容易に使用可能であること、「XOOPS Cube」など人気の高いWebアプリケーションの動作前提DBに採用されていることなどが挙げられる。

 一方、選びにくい理由には、適用形態によりFPL商用ライセンスとその料金が必要になること、ビュー、ストアド・プロシージャ、トリガのサポートについてはまだ日が浅いこと、そして、Berkeley DB/InnoDBがOracleに買収され、自前のストレージ・エンジンであるFalconの正式リリースがまだなされていないことや、Community 版とEnterprise版が分離されたことなど不確定な要素が増えた点が挙げられるだろう。

Column:Community ServerとEnterprise Server

 MySQLは、2006年10月より有料版の「MySQL Enterprise」と無料版の「MySQL Community Server」に分岐した。

 企業向けのMySQL Enterpriseは安定指向の製品で、ライセンスはGNU GPLと商用ライセンスが採用される。バイナリは有償で再配布はできない。製品本体にインストール/コンフィグレーション・ウィザード、「MySQL Network Monitoring」「Advisory Service」などが付属する。また、毎月のソフトウェア・アップデートと、四半期ごとのサービス・パックが提供される。

 一方、Community Serverは多くの機能を実装していくことが重視される。ライセンスはGNU GPLを採用し、バイナリを無料で再配布することができる。

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)。

ossdb_5.jpg 図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にネーティブ対応してからさほど経過していないこと、開発やリリースの速さゆえ、バージョン選定が難しく、メンテナンスにも手間がかかる点、そして、高機能/大規模化が進んだことで、一から気軽に始めたいというユーザーにはやや敷居が高くなっていることが指摘されている。

[後編]に続く

(月刊Computerworld 2007年8月号に掲載)

提供:Computerworld.jp