「LAMP」という言葉をご存知だろうか。オープンソース・ソフトウエアによるシステムでよく使用されるソフトウエアの組み合わせを示したものだ。OSのLinux,WWWサーバーのApache,データベースのMySQL,スクリプト言語のPHPとPerl,これらを総称してLAMPと呼ぶ。

 日本でもLinuxやApacheの浸透に異論を唱える人はいないであろう。既に,Linuxは,OSの選択肢として確立しており,Apacheも広く普及している。PHPは修得の容易さなどから,Javaに代わって利用される例も増えている。

 DBMSとしては日本ではPostgreSQLの人気が高い。しかし海外では,MySQLはPostgreSQLを凌ぐ普及を見せており,MySQLは大規模サイトなどで多数使用されている実績もある。Yahoo! Financeでは,MySQLで約25Gバイトの容量を持つデータベースが稼働している。ドイツのオンライン自動車販売サイトmobile.de GmbHでは,60台以上のサーバーで1秒間に約2000トランザクションを処理している。そのほか,Googleやニュース・サイトのSlashdotもMySQLのユーザーである。

 MySQLは,スウェーデンの企業MySQL ABが開発し,オープンソース・ライセンスと商用ライセンスのデュアル・ライセンスで配布している。IT Proオープンソースに掲載されているMySQL ABのCTO Michael“Monty”Widenius氏のインタビューで,MySQLが公開された経緯や実績などが紹介されているので,そちらも参照されたい。

 この連載では,MySQLの最新状況を紹介していく。

次期版5.0で,ストアド・プロシージャやトリガーを実装へ

 MySQLは,処理性能を追求して開発された。MySQLでデフォルトとなっているMyISAMタイプのテーブルは,複雑な機能を実装せず,データの入出力に機能を絞ることで速度を追求しているためだ。

 しかし,ここへ来て,MySQLは様々な機能を機能を実装した多機能DBへと変貌しつつある。

 2003年中にリリースされる見込みの4.1では,SQL文の条件節(WHERE節)に問い合わせを記述する 副問合せや,Unicode(UTF8)サポートが組み込まれる。4.1に関しては,既にガンマ版が公開されている。

 5.0では,SQL99への対応を目指し,ストアド・プロシージャおよびトリガーのサポートが予定されている。5.0も,まだ開発版だが,すでにソースコードがダウンロード可能になっており,2004年前半のリリースを目標に開発が進められている。

速度や機能など,目的に応じテーブルのタイプを使い分ける

 このように多機能化することで,処理性能が犠牲になる恐れはないのだろうか。実は,MySQLには,複数のテーブル・タイプがあり,速度や機能,信頼性など優先する機能によってを使い分けることができる。この仕組みにより,複雑な機能が必要なければ,処理性能を低下させずにすむ。

図1●MyISAMとInnoDB

 前述のデフォルトのテーブル・タイプMyISAMは,トランザクションもサポートしていない。トランザクションが必要な場合には,現在InnoDBと呼ばれるタイプのテーブルを使用することが多い。InnoDBはトランザクション,行レベルのロック,外部キーなど多くの機能を備えている。しかし,これらの機能がオーバーヘッドとなるため,MyISAMに比べInnoDBを使用するとスピードは落ちる。

■変更履歴
「MySQLに比べInnoDBを使用するとスピードは落ちる」と記述しておりましたが、正しくは「MyISAMに比べInnoDBを使用するとスピードは落ちる」です。お詫びして訂正します。本文は修正済みです。 [2008/10/20 12:40]

 前述の2つに加え,MySQLは合計6種類のテーブル・タイプを使用できる。テーブル・タイプはデータベースごとではなく,テーブルごとに選ぶことができる。後から,テーブル・タイプを変更することも可能である。

 MySQLでは,前述の2種類とを合わせ6種類のテーブル・タイプが用意されており,ユーザーが必要な機能によって,選択することができる。

 筆者は,表1のように2つのグループに分けて説明している。

表1●MySQLの6種のテーブル・タイプ
テーブル・タイプ 概略
基本タイプ
MyISAM
MySQLの基本となるタイプ
テーブル単位のロック
BerkeleyDB トランザクションが可能
ページ単位のロックが可能
InnoDB
トランザクションが可能
行単位のロックが可能
外部キーが可能
補助的なテーブル・タイプ
MERGE
同じ構造の複数のテーブル(MyISAMタイプ)を連結して
1つのテーブルとする
HEAP
メモリー上に作成されるテーブル
データベースの終了時に消滅する
Temporary
接続ごとにユニークなテーブルとして作成される
他の接続からは参照できない
接続終了ととも消滅する

 速さを優先するならMyISAMタイプを,機能を優先するならBerkeleyDB(BDB)タイプやInnoDBタイプ使用すればいい。後から,テーブル・タイプを変更することも可能である。表2では,MyISAMタイプ,BerkeleyDBタイプ,InnoDBタイプの特徴を比較している。

表2●主要なテーブル・タイプの比較

MyISAM
BerkeleyDB
InnoDB
ロック(排他制御)の単位
テーブル
ページ

トランザクション
×


保存形式
3ファイル
2ファイル
全テーブルを1領域に格納
1つの領域を複数ファイルで構成
図2●InnoDBの構成

 InnoDBタイプのテーブルは,データ量の増加に伴い,自動的にファイルが拡張され,限界に達すると別ファイルが自動的に作成される。そのため,1テーブルの大きさを,OSの1ファイルの容量制限より大きくすることもできる。

 今回は初回ということでMySQLの概要と,ロードマップを紹介した。最近の大きなトピックスとしては,2003年5月に発表されたドイツSAP AB社との提携がある。これにより,SAPが開発していたDBMSSAP DBとMySQLが統合される予定だ。原稿執筆時点で,明確なロードマップや詳細が示されていないが,今後明らかになれば,連載の中で紹介していきたい。

佐藤栄一(Satoh Eiichi)

■MySQLの最新リリース状況
バージョン3系列  3.23.58(mysqldumpの問題修正など)2003年9月11日
バージョン4.0系列 4.0.15(MacOS Xをサポート,mysqldumpの問題修正など)2003年9月3日
バージョン4.1系列(アルファ版) 4.1.0(45バイト・パスワードによるユーザー認証機能追加など)2003年4月3日

■著者紹介 佐藤栄一(さとうえいいち)
ゼンド・オープンソースシステムズ株式会社 アーキテクト MySQL担当。ゼンド・オープンソースシステムズは,オープンソースによるシステム構築を提案し,情報化投資削減の実現を目指して平成14年12月に設立。PHPのコア技術者が設立したイスラエルZend Technologies社と提携関係にあり,Zend製品の販売,サポートおよびLAMPおよびLAPPによるシステム構築を推進している。平成15年8月より,MySQL AB社のリセーラとしてライセンス,サポート,コンサルティングの提供を行っている。




【おわびと訂正】
記事掲載当初,本文の15段落目「機能を優先するならDBDタイプ」としましたが,「機能を優先するならBDB(BerkleyDB)タイプ」の誤りです。お詫びして訂正いたします。