はじめに
ここ最近のうちにオープンソースデータベース開発を行った人ならば、アプリケーションで使うデータベースを選ぼうとすると選択肢が山ほどあるということをご存知でしょう。現在では、Microsoft SQL ServerやOracleなどの商用製品だけでなく、MySQLやPostgreSQLのように、同等の機能を何分の一かのコストで提供するオープンソース製品も実用的な代替手段として利用できます。
ただ、これらの製品は多数の堅牢な機能を備え、コストの削減にも貢献しますが、小さくはありません。PostgreSQLおよびMySQLの最新のダウンロード版は、それぞれ12MBと57MBもあります。最低限のデータベース機能だけを必要とする小規模のアプリケーションでは、機能豊富な大型データベース製品を使用するのは不釣合いであり、多くの場合、軽量データベースの方が適しています。軽量データベースはトリガ、ビュー、ストアドプロシージャなどの洗練された機能を備えていないかもしれませんが、その代わり、最小限のリソースとディスク領域で済むというメリットがあります。
では、実際にどのような軽量データベースがあり、プロジェクト内でどのように利用できるのでしょうか? 本稿では、この質問に答えるために、いくつかの選択肢を紹介し、サンプルアプリケーションを作成してみます。本稿で紹介するサンプルWebアプリケーションは個人用の仕事リスト(TODOリスト)で、個人ユーザが自分の「するべき仕事」をデータベースに記録するためのものです。ブラウザベースのインターフェイスで、仕事リストの項目を追加、編集、削除し、完了項目および保留項目のリストを表示することができます。
データベースの選択
ここで、現在利用できる6種類の軽量データベースを簡単に紹介します。いずれも小規模から中規模のアプリケーションに適した軽量オープンソース製品です。
- Apache Derby
- H2
- Ocelot
- Firebird
- One$DB
- SQLite
ALTER TABLE
コマンドと、フィールドデータ型のごく一部だけをサポートしています。しかし、SQLiteはここで紹介した中で最も小さく軽いデータベースエンジンであり、SQLite固有のドライバとPDOデータ抽象化レイヤの両方を通じてPHP 5.xでネイティブにサポートされています。これから開発するサンプルアプリケーションに最も適しているのはどのデータベースでしょうか? その答えは、各自のニーズによって異なります。オープンソースのLAMPスタックは最もコストが安く、コストの安さを優先するならば、Windows専用のOcelotはすぐに選択肢から除外されます。残る選択肢の中から、私は今回のアプリケーションのためにSQLiteを選びました。これにはいくつか理由があります。第一に、SQLiteはPHPでネイティブにサポートされているため、PHP開発者ならば特別な設定やインストールを行わなくてもすぐに開発に利用できます。第二に、SQLiteは他のデータベースとは異なりトリガ、ストアドプロシージャ、外部キー制約などの洗練された機能を備えていませんが、軽量でリソース効率が良く、高いパフォーマンスを期待できます。第三に、個人的な理由ですが、私はあまりJavaに詳しくないので、JavaベースのRDBMSエンジンよりもSQLiteの方が使いやすいと思ったからです。
データベースのインストール
データベースとしてSQLiteを選択したら、まずはインストールする必要があります。クライアント/サーバ方式のMySQLやPostgreSQLとは異なり、SQLiteでは、コマンドラインプログラムを使用してディスクベースのデータベースファイルを直接操作します。このプログラムの各プラットフォーム用のコンパイル済みバイナリは、こちらのサイトからダウンロードできます。現時点では、WindowsおよびLinuxのコンパイル済みバイナリと、Linux、Windows、Mac OS Xシステムに対応するクロスプラットフォームのスターキット(starkit)が用意されています。
WindowsシステムでもLinuxシステムでも、SQLiteのインストールは非常に簡単です。必要な作業は、ダウンロードしたアーカイブ(単体のバイナリファイル)の内容を、自分の選んだディレクトリ(原則的にはデフォルトのシステムパスに指定済みのもの)に展開することだけです。これにより、このバイナリを使ってSQLiteデータベースを作成および操作できます。
このプログラムをカスタマイズしたい、あるいはお使いのプラットフォーム用のコンパイル済みバイナリがないなどの理由でプログラムをソースコードからコンパイルしたい場合は、ソースコードアーカイブをシステムにダウンロードし、ビルド領域を作成し、次に示す標準的なconfigure/make/make installの手順を使ってコードをコンパイルします。
root@thor:/tmp# tar -xzvf sqlite-3.3.17.tar.gz root@thor:/tmp# mkdir build root@thor:/tmp# cd build root@thor:/tmp# ../sqlite-3.3.17/configure root@thor:/tmp# make root@thor:/tmp# make install
デフォルトでは、コンパイルしたSQLiteバイナリが/usr/local/binにインストールされます。
SQLiteバイナリをインストールしたら、本稿の作業リストアプリケーションで使用するtodo.db3という名前の空のデータベースを初期化します。このデータベースは次のようにして定義します。
C:\Apache\Data> sqlite3.exe todo.db3 SQLite version 3.3.17 Enter ".help" for instructions sqlite>
root@thor:/usr/local/apache/data# sqlite3 todo.db3 SQLite version 3.3.17 Enter ".help" for instructions sqlite>
ここでSQLiteのコマンドプロンプトが表示されます。コマンドを入力するときは、先頭にピリオドを指定します。たとえば、ヘルプを表示するには.help
というコマンドを入力します。このコマンドにより、次のようなコマンド一覧が表示されます。
sqlite> .help .bail ON|OFF Stop after hitting an error. Default is OFF .databases List names and files of attached databases .dump ?TABLE? ... Dump the database in an SQL text format .echo ON|OFF Turn command echo on or off .exit Exit this program .explain ON|OFF Turn output mode for EXPLAIN on or off. .header(s) ON|OFF Turn display of headers on or off .help Show this message .import FILE TABLE Import data from FILE into TABLE .indices TABLE Show names of all indices on TABLE ...
SQLiteのコマンドラインプログラムを終了するには、.quit
と入力します。SQLiteのコマンドプロンプトからOSのコマンドプロンプトに戻ります。
sqlite> .quit C:\Apache\Data>
セキュリティのために、todo.db3データベースファイルはWebサーバーのルート以外の場所に保存するとよいでしょう。そうすれば、リモートユーザーがこのファイルをHTTP経由でダウンロードできる可能性はなくなります。