OSSピックアップ - データベースエンジン/サーバー編
「OSSピックアップ」は、世界最大のオープンソースソフトウェア情報サイト「freashmeat.net」に掲載されているオープンソースソフトウェアから、人気のあるものや最近注目を浴びているものをピックアップして紹介する企画である。今回はデータベースエンジン/サーバーとして分類されているオープンソースソフトウェアから注目のものを紹介する。
定番のデータベースエンジン「PostgreSQL」
PostgreSQLは20年以上の歴史を持ち、すべてのメジャーなOSで動作する、安定したリレーショナルデータベースシステム(RDMS)である。
PostgreSQLはACID(アトミック性/一貫性/独立性/永続性の頭文字を取った頭字語であり、トランザクション処理を行う際に必須の機能)を備えており、外部キー(foreign keys)や表結合(joins)、ビュー、トリガー、ストアドプロシージャといった、機能を備えている。また、INTEGERやNUMERIC、BOOLEAN、CHAR、VARCHAR、DATE、INTERVAL、TIMESTAMPといった、SQL92やSQL99で定義されているほぼすべてのデータタイプに対応している。
また、画像や音声、動画などといったサイズの大きいバイナリオブジェクトの保存にも対応しており、Java、.Net、Perl、Python、Ruby、Tcl、ODBCなどの言語向けのインターフェイスも利用可能だ。また、ドキュメントが豊富に用意されているのもユーザーにとっては便利だろう。
PostgreSQLと双璧をなすオープンソースのデータベースエンジン「MySQL」
MySQLは世界的に普及している高速なSQLデータベースサーバーである。PostgreSQLと同様、サーバーデーモン(mysqld)と様々なクライアントプログラム/ライブラリから構成される、クライアント-サーバー方式でインプリメントされている。
MySQLではSQLエンジンとストレージエンジンが分離されており、用途に応じてストレージエンジンを選択できる特徴がある。代表的なストレージエンジンはMyISAMとInnoDBで、MyISAMはトランザクションに非対応だがReadが高速、InnoDBはトランザクションや外部キー制約に対応するなど多機能だがその分Read速度がMyISAMよりも劣る、と言われている。
MySQLはかつてはスウェーデンのMySQL ABによって開発されていたが、2008年2月にMySQL ABはSun Microsystemsに買収され、現在ではその権利は同社が保有している。オープンソース版であるMySQL Community Serverのほか、商用版であるMySQL Enterpriseも販売されている。phpMyAdminなどの管理ツールが豊富に用意されているのも特徴である。
1ファイルとしてデータベースを保存する小型/軽量のデータベースエンジン「SQLite」
SQLiteは小型軽量かつ高速な組み込み向けSQLデータベースエンジンだ。機能的にはSQL92規格にほぼ準拠しており、アトミックなコミットに対応したトランザクションやロールバック、サブクエリ、合成クエリ、トリガ、ビューなどを備えている。
データベースは1ファイルに保存され、クロスプラットフォームで利用できる。C/C++ APIが付属するほか、PerlやPython、Ruby、PHPなど、さまざまな言語で利用できる言語バインディングも用意されている。
Mac OS Xではシステムに標準で組み込まれており、Appleのさまざまなアプリケーションで利用されているほか、Firefoxなどさまざまなアプリケーションでも利用されている。
伝統のあるデータベースエンジン「Berkeley DB」
Berkeley DBは「libdb」としても知られるデータベースライブラリであり、アプリケーションに組み込んで利用できる。ライブラリとして利用するため、利用するアプリケーションと同じプロセスで動作し、プロセス間通信やSQL文の発行・解析といったオーバーヘッドが少ないのが長所である。
キーとレコードの組み合わせをデータベースに格納し、クエリは与えられたキーに対応するレコードを取得するだけという単純なデータベースではあるが、並列性やトランザクション機構、ロック機能などを有しており、複数のアプリケーションから同時にデータにアクセスできるようになっている。
PerlやPython、Java、PHP、Tclなど、さまざまな言語向けの言語バインディングが提供されており、さまざまなUNIXベースの環境やWindowsで利用できる。
Berkeley DBはもともとはUNIXに含まれていたDBMから発展したものであるが、現在ではオラクルがその権利を所有しており、独自のオープンソースライセンスと商用ライセンスのデュアルライセンスで提供されている。
Javaで実装されたデータベースエンジン「H2 Database Engine」
H2 Database Engine(H2)はJavaで実装されたSQLデータベースエンジンである。すべての機能がJavaのみで実装されており、インメモリでの動作や暗号化データベース、ODBCおよびJDBC APIのサポート、全文検索機能といった特徴を備えている。
組み込みモードおよびサーバーモード、クラスタモードという3通りのモードで動作し、ブラウザベースのコンソールアプリケーションも付属している。また、GCJでのコンパイルにも対応しているとのこと。
H2はHSQLDBの作者であるThomas Mueller氏が開発したソフトウェアだが、1からスクラッチで書き直されているそうだ。
Firefoxとの名称問題でも話題になったコンパクトなRDBMS「Firebird Relational Database」
FirebirdはANSI SQL-99の多くの機能を提供しているリレーショナルデータベースで、LinuxやWindows、さまざまなUnixプラットフォーム上で動作する。高い並列性やパフォーマンス、ストアドプロシージャやトリガーのための強力な言語サポートが特徴である。
FirebirdはかつてBorland社が開発していたRDBMS「InterBase 6.0」をベースに開発されており、そのほかコンパクトで設定が用意、別のソフトウェアに組み込んでの利用が容易、といった特徴も備えている。
さまざまなツールやコンポーネントも公開されており、GUIの管理ツールや、各種言語からFirebirdにアクセスするためのDelphiコンポーネント、ODBC/OLEDBドライバ、.NET/C++/PHP/Python/Perl向けの言語バインディングなどが利用可能だ。
なお、Firefoxを開発するMozilla OrganizationもかつてMozillaをベースとしたWebブラウザにFirebirdの名称を付けていたが、Firebirdプロジェクト側からクレームが付き、現在のFirefoxという名称に変更されたという歴史的経緯がある。
日本発の高速データベースエンジン「Tokyo Cabinet」
Tokyo Cabinetは、QDBMの後継として開発されたデータベースライブラリである。現在mixiに所属している平林幹雄氏によって開発されており、mixi内部でも利用されている。
Tokyo CabinetはSQLデータベースなどに代表されるリレーショナルデータベースとは個となり、キーと値のペアで構成されるデータのみを格納できるデータベースで、動作が高速、実行ファイルのサイズやデータベースサイズが小さい、といった特徴がある。たとえば、100万件のレコードを格納するために必要な時間はハッシュデータベースを利用する場合で1.5秒、B+treeデータベースを利用する場合で2.2秒程度の時間で済むとのこと。
Javaと.NETで利用できるオブジェクトデータベース「db4o」
db4oはJavaおよび.NET(CompactFrameworkやMonoを含む)で利用できるオブジェクトデータベースだ。db4objects社が開発し、GPLおよび商用ライセンスのデュアルライセンスで提供されている。
db4oは任意のデータをデータベースに格納したり、格納したデータを受け取るコードを非常に簡潔に記述できるのが特徴。
ACID準拠のトランザクションやクラススキーマの自動認識、穴埋め方式のクエリ(query-by-example)、S.O.D.AオブジェクトクエリAPI、コールバック関数サポート、メモリファイルシステム、連鎖削除(cascade-on-delte)、マルチスレッドアクセス、Java Webstartおよびサーブレットサポートといった高度な機能を備えながらも、Javaや.NETからSQL文を介さずに直接データベースにアクセスすることができる。
また、組み込み機器などへの導入も考慮されており、非力なCPUや少ないメモリ容量でも実用的に動作するとのことで、実際にコピー機などでの採用例があるとのことだ。
扱いやすく高速な組み込み向けデータベース「hamsterdb」
hamsterdbはANSI-Cで記述された組み込みデータベースエンジンだ。ANSI-Cで実装されているため、非常に多くのプラットフォーム/アーキテクチャに対応している。また、ほかのライブラリなどへの依存性も低いため、アプリケーションへのリンクも容易だ。
可変長のキーおよびレコードをサポートしたB+treeデータベース機能を備えており、インメモリデータベースやエンディアン非依存のデータベースファイル、データベースカーソル、1ファイルに複数のデータベースを格納可能、”record number”データベース、重複キーなどの特徴を備えている。
またhamsterdbは安定性も重視されており、開発時には数百ものユニットテストを行い、さらにリリース版ではさまざまな設定やハードウェア、OS、アーキテクチャにおいて、数千にもおよぶテストを行っているという。