Javaは,サーバーサイドのプログラミング言語として,すっかり定着した感があります。JSP(JavaServer Pages),サーブレット(Servlet),EJB(Enterprise JavaBeans)などのJ2EE(Java2 Platform, Enterprise Edition)関連技術は,書籍や雑誌などで頻繁に取り上げられています。
サーバーサイドJavaプログラミングを習得するとき,最初の一歩である「Hello World!」サーブレットを作り終えて文法を身に付けたら,次のステップは「外部データの読み書き」でしょう。プログラムは,蓄えた情報を外に記録したり,また外から新しいデータを読み込まなければ,常に同じ動作しかしません。ショッピング・サイトや会員制サイトなどの本格的なWebアプリケーションでは,商品情報や会員情報といったデータの読み書きが必須です。実用的なアプリケーションを作るなら,リレーショナル・データベース(RDB)を導入して,データを一元管理するのが一般的でしょう。最近では,インターネットでよく使われるXML(Extensible Markup Language)ファイルをデータソース(データの保存先)として利用する機会も増えています。
そこで,ここではサーバーサイドのJavaアプリケーションからRDBまたはXMLにアクセスする基本的なプログラミング・テクニックを,サンプル・プログラムを使って説明します。それぞれのメリット/デメリット,プログラミング・スタイルの違いなどをしっかり理解して,Web時代のデータソース・マスターを目指してがんばってください。
大量データの編集に向くRDB 環境間のやり取りに向くXML
新規にプログラムを作る場合,データソースとしてXMLとRDBのどちらを使うのがいいのだろう,と悩んでしまう方もいると思います。最初に,それぞれのメリット/デメリットについて比較してみましょう。
サーバーサイドのプログラミングでは,
データソースに対して“スレッドセーフ”なアクセスを常に意識すべき
という決まりがあります。スレッドセーフ(thread safe)というのは,複数のプログラム(スレッド)が同時に同じデータソースへアクセスしても,データの不整合を起こさないというものです。
RDBを利用する場合,RDBのデータベース・サーバーがデータの管理やアクセス制御などの仕事を肩代わりしてくれますので,比較的容易にスレッドセーフなプログラムを書くことができます。一方,XMLでは,プログラマが自分でスレッドセーフなコーディングをしなくてはなりません。完全にスレッドセーフなコードを書くのは,なかなか難しい作業です。スレッドセーフにすることでパフォーマンスが低下する可能性もあります。この点では,データベース・サーバーに任せる方が歩があると言えます。
また,データの操作という観点で比べると,RDBでは,プログラム側でSQL*1文を発行して命令を出すだけです。実際の操作は,すべてデータベース・サーバーが行います。SQL文の書き方さえ覚えれば,コーディングは比較的容易でしょう。さらに,データベース・サーバーは一般にデータ量が多くなっても,データ操作の実行速度が落ちないように実装されています。そのため,データ数の増加によるパフォーマンスの低下が少ないという特徴があります。
これに対してXMLでは,すべてのデータ操作をプログラム側で実装します。したがって,データ数が多くなればなるほど,パフォーマンスの低下が起こります。また,データ数の増加で操作が複雑になれば,コードも複雑になります。コーディングの難易度はRDBに比べてぐっと高いと言えるでしょう。
一方,XMLには,国際的に標準化されたデータ記述形式であるというメリットがあります。そのため,異なるプラットフォームや企業間などでデータをやりとりをする場合に最適なデータソースと言えます。これに対しRDBはデータベース・サーバーの種類によって独自のバイナリ形式でデータを保存しますので,異なる環境間で直接データをやり取りするには不向きです。現実には,いったんXMLに変換してデータをやり取りするというケースも多いようです。
また,導入コストの点からもRDBとXMLには違いがあります。XMLの実体は単なるテキスト・ファイルですので,ファイルの入出力ができる環境さえあれば,XMLをデータソースとして利用できます。しかしRDBは,サーブレット・コンテナなどのプログラムの実行環境とは別に,データベース・サーバーを導入しなくてはいけません。XMLに比べると,導入のコストや敷居が高くなります。
以上を踏まえると,JavaでのRDBとXMLの使い分けのポイントは次のようになります。
<RDBを使うべき場合> | |
・ | サーブレットの中で,頻繁にデータの更新を行う |
・ | データ数が多く,検索のパフォーマンスを重視する |
<XMLを使うべき場合> | |
・ | データ参照が主体で,データ更新の少ないアプリケーション |
・ | 異なるプラットフォーム間でデータ交換を行う必要がある |
・ | データベース・サーバーを導入せずにデータ管理を行いたい |
例えば,RDBを用いる例としては,会員制サイトのユーザー情報などが挙げられます。サイトによってはユーザー数が非常に多くなることがあり,またブラウザを通して頻繁にユーザーの登録情報を更新することがあるからです。一方,XMLを用いる例としては,ショッピング・サイトの商品データなどが挙げられます。商品データが,ブラウザからの要求に応じて更新されるといったことはあまりありません。しかし,新しい商品データを別のプラットフォームから自動的に送信したい,というようなニーズはよくあります。