XMLは主役から名脇役に
数年前には、XMLはIT業界注目のキーワードだった。しかし、ここ最近はあまり耳にしない。とはいえ、XMLが消えてなくなったわけではない。むしろXMLはほとんどのシステムで、何らかの形で活用されつつある。複数のシステムがあれば、その連携にはXML形式でデータのやりとりがなされ、さらに業界ごとにXMLの国際標準化も進みつつある。
アプリケーション開発においても、エラーログなどを単なるテキスト形式で出力するのではなく、XML形式で出力することも増えてきた。XMLデータにしておけば、後からそれを様々な形式に変更し表示したり、別のシステムに取り込んだりという作業が極めて容易になるのだ。いまやXMLは主役ではないが、名脇役としてあちこちで活躍している。
XMLをデータベースで効率よく扱うには
ところで、リレーショナルデータベースで大量なXML形式のデータを扱うには、大きく2つの方法がある。1つは、XMLデータを丸ごとCLOB(Character Large Objects)カラムに格納する方法だ。この方法では、そのままデータを挿入するだけなので、データ格納時に何ら手間がかからず高速に処理できる。そのため、XML形式データを単純に蓄積する用途には向いている。
ただし、特定の値を検索し取り出すには、XML構造をいちいち解析しなければならず、速度はそのぶん遅くなる。さらに、格納されているXMLデータの一部を更新する用途にも、まったく向いていない。 もう1つの方法が、XMLデータを分解しリレーショナルデータのテーブルに展開し格納する方法だ。
この方法なら格納された後は、通常のリレーショナルデータベースのデータとまったく同じなので、自由に検索もできデータ更新も容易だ。とはいえ、格納時にはその都度XMLデータをリレーショナル形式に展開する手間が増え、そのぶん余計に時間がかかることになる。
さらに、この展開する方法ではXMLの優位性である柔軟性を大きく損なうことになる。XMLは、タグとそれに囲まれた値という極めてシンプルな構造だ。タグを増やせば簡単に項目を増やせるし、タグの中にさらにタグを記述するといったように階層的なデータ構造も容易に表現できる。このシンプルさでデータ構造の変化にも柔軟に対応できるのが、XMLの最大の特長と言っても過言ではない(図1、2)。
たとえば、価格比較サイトのようなシステムでデータを扱う場合、決まりきった商品だけを扱うのであれば、リレーショナルデータベースのテーブルにデータを格納しても問題ない。インデックスなどを用いれば、検索も高速に行えるだろう。とはいえ、実際の価格比較サイトでは、頻繁に新しいタイプの商品が追加されるはずだ。商品が追加されれば、カテゴリ追加もありスペックなどを表現するデータ項目も増やすことになる。
これをリレーショナルデータベースで構築していたのでは、商品種類が増えるたびにテーブル構造を変更しなければならない。テーブル構造変更も大きな手間だが、さらに、それにアクセスするプログラムにも手を入れる必要もあるかもしれない。これでは、手間とコストが大きくかかり、柔軟で使いやすい価格比較サイトをスピーディーに実現するのは極めて難しい。