企業システムにおけるオープンソースソフトウェア(以下、OSS)の活用が叫ばれて久しい。一部では大規模な基幹システムへの採用事例もあるが、全般的に導入は進んでいない。特に、企業システムのエンジンとなるRDBMSとなると商用製品がほとんどである。
しかし、ミクシィや楽天をはじめとするWeb系企業の多くでは、RDBMSを含めOSSを中心にシステムが構築されている。せっかくの公共財である。一般企業においても利用できる場面がないか、いま一度目を向けてみてはどうだろう。そこで注目したいのが、Web系企業ではRDBMSの業界標準となってきたMySQLである。
処理性能こそ高いが、商用製品に比べると機能的に劣るとされてきたMySQLだが、ここにきて急速にキャッチアップしようとしている。2008年に登場予定の最新バージョン「MySQL 5.1」ではその機能差が改善される見込みで、データウェアハウス(以下、DWH)としての可能性も示唆している。OSSながら、エンタープライズを指向するRDBMSともいえるだろう。
RDBMSのMySQLは、いわゆるLAMP(Linux、Apche、MySQL、PHP/Perl/Python)構成の一部としてWebシステムに採用されるケースが増えている。日本では、同じOSSのRDBMSでもPostgreSQLの方が普及しているといわれるが、ミクシィ、楽天といった国内の有力なWeb系企業がMySQLを採用するなど、注目度が増している(2007年9月12日掲載の「mixiの生みの親“バタラ氏”が語るMySQLの意外な利用法」参照)。
コンシューマー系のWebシステムは、トラフィックの大部分が参照系だ。MySQLがWebシステムで多用されてきたのは、OSSという点に加え、この参照系の性能が比較的優れているためだ。また、こうしたWebシステムのアプリケーション開発で使われるPHP、Perl、Rubyなどの軽量な言語との相性の良さも採用に拍車を掛けている。
ユーザーがMySQLを導入する選択肢としては、新機能の実装を重視した「MySQL Community Server」と安定性を重視した「MySQL Enterprise Server」の2つがある(SIer向けにはOEM版が別途用意されている)。MySQL Community Serverのソースコード、バイナリはともにGPL(GNU General Public License)で配布されているが、MySQL Enterprise Serverでバイナリを得るには、年間保守やツールをパックにした「MySQL Enterprise」を購入する必要がある。
確かにMySQLは従来、OracleやMicrosoft SQL Serverなどの商用RDBMSと比べ、信頼性や拡張性、操作性などで見劣りする面があった。そのため、Web系ではない一般企業にとっては少し縁遠い存在だったかもしれない。しかしそれも、2008年に登場予定の「MySQL 5.1」で随分と変わる可能性がある。
MySQLの開発元であるMySQL ABでアーキテクチャ・ディレクターを務めるブライアン・エイカー氏は、次のように話す。「ミクシィや楽天のようなWeb系企業は、『スター・ウォーズ』の“ジェダイ”のようなもの。自らの武器となるライトセーバーを自分の力でビルドします。たとえMySQLの機能が不足していてもレベルの高い技術者を多く抱えているため、アプリケーションへの機能実装やほかのオープンソースコンポーネントとの組み合わせでカバーしてしまうのです。また、彼らはそうした開発スタイルを好んでいるとも思います。ただ、そうではない一般の企業にも使ってもらえるよう、MySQLは機能を拡張し続けているのです」
MySQLは、2005年10月に安定版がリリースされた現行の「5.0」からストアドプロシージャやトリガに対応。SQLのサポートでは商用のRDBMSにかなり近づいたといえる。製品候補版が2007年9月にリリースされ、2008年に安定版が登場する見通しのMySQL 5.1では、一層機能を充実させてくる。その目玉となるのが、「パーティショニング」機能の搭載である。
パーティショニングとは、1つのテーブルを列値や行値の条件で論理的に区分けして管理することだ(※1)。つまり、データ全体ではなく、細かくパーティショニングされたテーブルを対象にクエリを実行するため応答速度が速い。膨大なレコードを持つテーブルも意に介さないというわけだ。
※1 MySQL 5.1では、カラム値によってテーブルを行単位で区分けする「水平パーティショニング」のみに対応。Range/List/Hash/Keyという4つの関数タイプで区分けできる。
OracleやMicrosoft SQL Serverなどは従来よりパーティショニング機能をサポートしており、MySQLもそれに追い付いた格好になる。エイカー氏は、「MySQLは従来、(処理能力を高める方法として)廉価なマシンを連ねるスケールアウトを提唱してきました。しかし、5.1からはパーティショニング機能の追加によりスケールアップも可能で、最新マシンのスペックを存分に生かせるのです」と話す。

現行のMySQL 5.0では、データ量の増大でDBサーバの応答性能が悪化した場合、元のテーブルを期間やユーザーIDなどの値で分割し、それらを複数のDBに分散させるスケールアウトが一般的だ。ただ、分散するDBを制御するアプリケーション側に複雑なロジックを実装しなければならず、加えてDB構成の変更が常にアプリケーションへ影響する点が厄介だ。
その点、MySQL 5.1のパーティショニング機能は、アプリケーションに手を入れることなく1つのDB内でテーブルを分割できるため、同じマシンを使っていてもおのずと応答性能が向上する。つまり、データ量が増えてもパーティションのチューニング(追加・再分・統合)、あるいはCPUやメモリの増強によるスケールアップで対処できるのだ。
MySQL 5.1からは、パーティショニング機能によるスケールアップで大規模なデータを1つのDBサーバで管理しやすくなる。インデックスも分割できるため、パーティションの内部をさらに分割する“サブパーティショニング”も可能。データ量が増えても応答性能を維持しやすい開発・保守が容易なパーティショニングによる拡張性の確保は、ジェダイたるWeb系企業よりも一般企業のシステムに向いている。エイカー氏は、「1つのDBに複数のストレージエンジンを搭載できるMySQLは(※2)は、一般企業においてデータ分析によく利用されています。しかし、パーティショニング機能の搭載により、大規模なDWHとしても使われていくと見ています」と今後を予想する。
※2 ストレージエンジンとは、ディスクへ実アクセスを伴うデータ処理を担うモジュール。MySQLでは標準で「MyISAM」「InnoDB」などが用意されているほか、サードパーティ製品も追加できる。ストレージエンジンごとに得意な処理形態があり、テーブル(アプリケーション)ごと割り当てられる。
テーブルサイズが大きいDWHでは、レコード件数が何百万件、何千万件となり、汎用的なRDBMSをDBエンジンに適用するのは難しいとされる。だがそこは、もともと参照系の処理性能に定評のあるMySQL。パーティショニング機能の追加により、どれほどの規模のDWHにまで対応できるのか。今後登場してくるであろう各種の検証・導入リポートが待ち望まれるところだ。
MySQL 5.1でもう1つ注目したいのが、DBサーバの可用性を高めるクラスタリング機能「MySQL Cluster」の機能強化である。
MySQL Clusterの仕組みは複雑なため詳細は下図を参照してほしいが、要はアクティブ・アクティブのクラスタ構成により、負荷分散と高可用性を同時に満たしている。大きな特徴としては、テーブルおよびインデックスをディスクよりも高速なメモリ内に搭載する「インメモリ型」という点だ。そして通常は、秒単位で更新ログ、分単位でデータイメージをディスクへ保存する。
「MySQL Clusterの仕組み」テーブルを分割し、各パーティションをノード間でアクティブ/スタンバイのたすき掛け構成にする。仮にどちらかのノードで障害が起きても、残りのノードのすべてのパーティションをアクティブ化して稼働を継続する
「インメモリ型とディスクベースの比較」MySQL 5.0はメモリ内でデータを処理するインメモリ型を採用していたが、MySQL 5.1からはディスク上にデータ(テーブルのみ)を置いて処理するディスクベースにも対応予定だ。インメモリ型は性能面で、ディスクベースは可用性の面で優れるただ、メモリ内のデータは電源が切れると揮発するため、仮に全ノードが一斉停止した場合、ディスクに更新ログが保存されていないデータは消失してしまう。可用性(データ保護)という面では多少の不安があるとともに、大容量のメモリを搭載しなければならないのも難点といえば難点である。
それがMySQL 5.1からは、ディスク内のデータをベースにしたクラスタ構成が可能となった。エイカー氏は、「もともとMySQL Clusterは通信業界向けに開発されたものです。(高可用性と性能という意味では)性能をより重視してきましたが、一般企業ではそこまでの性能は必要なく、(可用性がより高くメモリ容量も少なくて済む)ディスクベースの方がふさわしいと思います」と、ユーザー層を広げるための機能強化であることを強調する。
また、ディスクベースといってもインデックスは従来通りメモリ内に保存。アクセスの多いテーブルはインメモリ型も選べるので、ディスクの入出力を減らすようチューニングできる。「実際はインメモリ型とディスクベースのハイブリッドなので性能はそれほど落ちないはずです」とエイカー氏は話す。
OracleやMicrosoft SQL Serverにもクラスタリング機能はあるが、最上位版でしか使えない。また、信頼性(価格)の高い共有ディスクやクラスタリングソフトが別途必要になるなど制約も多い。その点、MySQLは標準提供されるストレージエンジン「NDB Cluster」を適用するだけでよい。コスト的にはかなり優位である。なお、MySQL 5.1からはクラスタ間のレプリケーション機能にも対応する予定で、遠隔サイトを利用した災害対策にも使えそうだ。
以上、MySQL 5.1に搭載される代表的な新機能のごく一部を紹介したが、このほかにもスケジュール登録をした各種クエリを自動実行する「イベントスケジューラ」、マスタ・スレーブ間のデータ同期をSQLベースではなく物理データ(値)で行う「行ベースレプリケーション」など、操作性、信頼性を高める多くの新機能が搭載される見込みだ。
確かに、一般企業ではオープンソースのRDBMSを採用することに抵抗感があるかもしれない。しかし、機能面では商用のRDBMSに近づきつつある。オープンソース製品でネックとなるサポート面も、MySQL ABの日本法人設立により安心感が出てきた。同法人は現在、2人のサポートエンジニアを抱え、2008年より日本語でのヘルプデスクも設置する予定だ(現在は英語のみのサポート)。
「いきなり既存のRDBMSを置き換えるのではなく、まずは何か新しいアプリケーションを開発する際にMySQLを採用し、その実力を試してほしい」と語るエイカー氏だが、その価値は十分にあるだろう。