XMLデータベース製品カタログ 2003
〜XML対応リレーショナルデータベース編〜

山田祥寛
2003/11/15


紹介する製品
Microsoft SQL Server 2000
DB2 Universal Database V8.1
Sybase Adaptive Server Enterprise 12.5
Oracle9i XML DB
Sybase Adaptive Server Enterprise 12.5

■JavaオプションでシンプルなXML対応を実現する

 Sybase Adaptive Server Enterprise(ASE)におけるXML機能とJavaオプションは切っても切れない関係にある。というのも、ASE上のXML機能はすべてASEデータベース内のJava対応オプション(Java仮想マシン)を利用して実現されているためである。これによって、ASEはコアなデータベースエンジンになんら影響を与えることなく、完全な外部機能としてのXML対応を実現している。

ASEのJavaサポート機能

 そこで、まずはASEのXML対応について紹介する前に、前提となるJavaサポート機能を概説してみる。ASEでは、データベース内部に専用のJava仮想マシンを実装することで、データベースから容易にJavaクラスをコールすることができる。例えば、T-SQL(ストアドプロシージャ)からJavaメソッドを呼び出し、プロシージャとして利用することも可能であるし、そもそものSQLデータ型自体をJavaクラス型に割り当てることが可能なのである。

図1 Javaクラスをデータ型として格納


/* テーブルの作成 */
create table jBlurbs (au_id int, jcopy java.lang.StringBuffer)

/* Insert 処理 */
insert into jBlurbs values
(1, new java.lang.StringBuffer("the quick brown fox jumped"))

/* Update 処理 */
update jBlurbs
set jcopy = new java.lang.StringBuffer("The quick brown fox jumped")
where au_id = 1

/* 検索 */
select jcopy>>append("so I can append") from jBlurbs
where au_id = 1
リスト1 Javaクラスをデータ型に持つテーブル

 例えば、“jcs.xml.resultset.RX”というJavaクラスのsql2Xmlメソッドは、SQL-SELECT命令による実行結果をXML形式のStringで返すメソッドだ。Javaメソッドは、SELECT命令を介して呼び出すことができる。

select jcs.xml.resultset.RX.sql2Xml("select * from systypes")
リスト2 jcs.xml.resultset.RXクラスからsql2Xmlメソッドを呼ぶ

 Javaメソッドをコールするに当たっては、あらかじめ該当のJavaクラスをSybase Central Java Editionと呼ばれる管理ツールを使ってインストールするだけでよい。「.jar」ファイルを登録するだけなので、慣れてしまえば作業自体はごく簡単だろう。

図2 管理ツール「Sybase Central Java Edition」からJavaクラスをインストールする

 命令の実行結果は以下のとおりである。

図3 リスト2に示したメソッドを呼び出した結果

 また、いつもJavaメソッドをパッケージ名も含めた完全修飾名で指定するのは面倒だという場合には、SQLJ関数としてラッピングする機能も備えている。SQLJ関数の定義は、とても簡単だ。

create function sql_to_xml(query java.lang.String)
returns java.lang.String
language java
parameter style java
external name 'jcs.xml.resultset.RX.sql2Xml'
リスト3 SQLJ関数の定義例

 先述のSQL命令は以下のように記述することができる。これによって、命令を発行するユーザー側はJavaを利用しているということすら意識する必要がなくなるというわけである。

select sql_to_xml("select * from systypes")
リスト4 SQLJ関数の呼び出し例

XMLネイティブのデータ型

 さて、ASEでは、XMLドキュメントをデータベースに格納するための手段として、大きく2つ――「SybMemXmlStream」と「SybFileXmlStream」を提供する。これらはいずれも内部的にはJavaクラス型として扱われるもので、前述したASEのJavaオプションを利用したものである。ASEでは、XML文書をパースした結果をsybase.aseutils.SybXmlStreamインターフェイスの実装クラス(つまり、上記の2つのデータ型)を利用することで、メモリまたはファイルに保存できる。当然、格納時にDOMツリーに展開されているわけであるから、検索時にも再パースの必要はなく、高いパフォーマンスが望める。

インデックスによるパフォーマンスの改善

 ASEでは、XMLドキュメントが保存・更新される機会よりも、圧倒的に「参照」される機会が多いことに着目して設計が行われている。この前提と「FIX(Fast Indexes for XML)」アーキテクチャ(特許出願中)に基づき、ASEはXML文書の検索効率を最適化している。

 FIXアーキテクチャとは、XML文書内の特定タグについて補助インデックスを生成する仕組みのことをいい、これによってXML問い合わせの効率を最適化している。また、ASEでは、XML文書の部分読み込みを可能にすることで、リソースの消費を最大限に抑制している。

 ただ、XML文書は必ずしもきちんとタグ付けされた構造化データばかりではない。限りなくプレーンなテキストに近い、緩いタグ付けのXML文書を格納することもあるだろう。そのようなデータに対応するために、ASEでは専用の全文検索エンジンである「Enhanced Full Text Search Specialty Data Store」を用意している。これによって、フリーフォーマットの文書を検索するに際しても、高いパフォーマンスを維持することが可能となる。

XML問い合わせ言語にはXQLを提供

 XQL(XML Query Language)は、一般的なXML文書検索のために設計された問い合わせ言語で、ASE上にインストールして使用することも、スタンドアロンのアプリケーションとしてASE外部で利用することも可能である。

バージョン
SQL
XQL
入力元 RDBMSのテーブル 階層化されたXMLドキュメント(群)
出力される結果セット 結果セット 整形式のXMLドキュメント
DBMSは必要か? Yes No
“distinct”機能のサポートは? Yes No
処理の対象は? テーブル中の多くの行 XMLドキュメント中の多くの要素
アクション・クエリのサポート Yes No
 SQLとXQLの比較表

 ただし、現行のXQLにはINSERT/UPDATE/DELETEなどのアクション・クエリは用意されていないので注意すること。XML文書内のノードを更新したいといった場合にも、現行のASEでは列全体(XML文書全体)を更新する必要がある。「参照」用途を主眼に置いたそのポリシーゆえんの仕様ではあるが、この点は次期バージョンでの改善に期待したい。

■次期バージョン12.5.1での主な変更点

 2003年10月17日に、ASEの次期バージョン12.5.1がプレスリリースされた(日本語版の発売は2004年の予定)。データベースエンジン・コアな部分だけではなく、XML対応機能についても、いくつかの重要(かつ顕著)な変更点が見られるので、本稿でも簡単に触れておくことにしよう。

Webサービスへの対応強化

 ASE Web Servicesを使用することで、ASE自身をWebサービスの提供者(プロデューサ)として、あるいは、外部のWebサービスに対するクライアント(コンシューマ)として機能させることができる。これによって、インターネットブラウザのようなHTTPクライアントは、ASEに対してSOAP経由でデータを要求し、その結果セットをXML形式で受け取ることが可能になる。

ネイティブなXML処理エンジン

 新バージョンではXML処理エンジンがASEのネイティブな機能として実装される。その結果、Java仮想マシンの起動などが不要になるため、XML用途でASEを利用する場合にさらなるパフォーマンスの向上が望めるだろう。また、for XML句の利用によって、リレーショナル表を動的にXML文書として出力することが可能になる。よりプログラミングレスなXML連携の実現に期待したい。

図4 ASE 12.5.1で実現されるIntegrated XML Data Managementの構成

オープンスタンダードへの対応

 W3C標準のXPath 2.0やXQueryに対応することで、より複雑なXML問い合わせにも対応できるようになる。標準技術の採用で、そのほかの製品との相互運用性、可搬性の向上を期待できるだろう。

4/5 Oracle9i XML DB

Index
XMLデータベース製品カタログ 2003
〜XML対応リレーショナルデータベース編〜
  XML対応リレーショナルデータベース概要
  Microsoft SQL Server 2000
SQLXMLで飽くなき「XMLレス」XML対応への挑戦
  DB2 Universal Database V8.1
企業内データソースの戦略的な統合を目指す
Sybase Adaptive Server Enterprise 12.5
JavaオプションでシンプルなXML対応を実現する
  Oracle XML DB
限りなきネイティブXMLデータベースへの挑戦

■関連記事
 ・XMLデータベース製品カタログ 2003 〜ネイティブXMLデータベース編〜
 ・XMLサーバカタログ 2001〜Summer 〜XMLデータベース編〜
 ・.NET Enterprise ServersのXML度を探る

「XMLデータベース製品カタログ2003」



XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間