最新RDBの機能拡張の目玉は,JavaとXMLへの対応だ。しかし,DB上でJavaを稼働させるメリットは現状では見えてこない。むしろ,性能や可用性の向上といった,既存システムに即効性のある機能に要注目である。

表1●RDBMS最新版の機能拡張
 Oracle,Sybase,DB2――2000年4月から6月にかけ,主要なリレーショナル・データベース管理システム(RDBMS)の最新版が国内出荷を開始した。また6月13日には,マイクロソフトがSQL Server 7.0の後継「SQL Server 2000」の最終ベータ(日本語版ベータ2)を配布開始した。 

 これら最新版の機能拡張は広範囲にわたるが,大きくは次の3つにまとめられる。(1)DB上でJavaプログラムを動かす,(2)XMLデータをDBに入出力可能にする,(3)DBの可用性を高める(表1[拡大表示])。これらの中で(1)や(2)が新機能の目玉とされてはいるが,現状では,DB上でJavaを稼働させる価値を見いだせるユーザーは少ないだろう。XML対応は,テーブルにデータを格納して操作できるというRDBMSのメリットが生かせるため,今後はXML専用のDBやツールとの住み分けがポイントとなる。しかし,それらの新機能よりも,大規模対応や可用性を向上させるための機能が注目に値する。特にインターネットでサービスを提供しているようなシステムでは有用だろう。

Javaを稼働させるメリットは見えない

図1●DB上でJavaを稼働すべき理由は乏しいOracle8i R8.1.6は,データベースの内部にJavaVMを搭載し,Javaストアド・プロシージャをはじめ,CORBAオブジェクトやEJBも稼働させられる。しかし,これまでに蓄えたPL/SQLの技術保護や,Webアプリケーション・サーバーなどとの役割分担を考えると,現状では,データベース上でJavaを稼働すべき積極的な理由は見えてこない
 「Oracle8i R8.1.6」はDB内部にJServerと呼ぶJavaVMを搭載した。これにより,ストアド・プロシージャをJavaでも記述できるようになった。さらに,Javaで開発したCORBAオブジェクトや,EJB*コンポーネントもDB上で稼働できる(図1[拡大表示])*1。「Sybase Adaptive Server Enterprise(ASE)12.0」もJavaVMを搭載しているなど,ストアド・プロシージャをJavaでも記述できるようにする製品は多い。ベンダー側の狙いは,PL/SQLやTransact-SQLといったベンダー固有の言語から脱却し,Javaという標準言語でDBを操作できるようにすることだ。その先には,「3階層すべてのロジックをJavaで統一しておき,アプリケーションの再配置を容易にする」(日本オラクル マーケティング統括本部 製品統括部 サーバー製品グループ 担当シニアマネジャー 森田晃一氏)というシステム像を描く。

 しかし,ストアド・プロシージャでのJavaの利用はそう簡単には進まないだろう。PL/SQLやTransact-SQLを使い慣れたユーザーが,新たにJavaを習得してまで乗り換える理由が見えないからである。確かに,OracleのJServerは,JDBCサーバー・ドライバとデータベースをメモリー空間で共有させるなど,Javaにおけるパフォーマンスを高めるための技術は向上してきたが,既存の独自言語と比べた性能や機能面でのメリットは提示していない。JServerを必要とする前提は,すべてのアプリケーションをJavaだけで開発したいというニーズにある。

JavaVMの非互換性に注意

 すべてのロジックをJavaで統一するユーザーにとっても,DB上でJavaを稼働させる際に注意すべきことがある。それは,Webアプリケーション・サーバーに代表される他のJavaの稼働環境との互換性だ。

 既にJavaでアプリケーションを構築しているユーザーが,一部のロジックをDB上に移植する場合,メーカーやバージョンの違いによるJavaVMの非互換性の問題を考慮に入れる必要がある。多くのWebアプリケーション・サーバーは独自のJavaVMを内蔵し,JavaサーブレットやEJBなどで作成したロジックを稼働させている。これらのロジックをDBに移植した場合,DBが備える“別の”JavaVMの上でそれまで通りに動くとは限らないからだ*2

図2●XMLデータをRDBで管理する
XMLデータをRDBに格納すれば,使い慣れたSQLを使って検索や更新処理が可能になる。XMLデータの保管方法はいくつかあるが,既存のデータを生かすのであれば,XMLの要素を抽出し,表や列にマッピングして格納する方法が向いている。図はSybase Adapitive Server Enterprise 12.0の例
 現状では,DB上でJavaを稼働させる機能が有効な場面が見えてこない。ただ,OracleやSybaseがJavaをベースにXML対応を実現しているように,今後の新サービスはJavaを土台にしてくる可能性が高いため,目は離せない。

データをマッピングしてXMLを利用

 Javaと並び,XML対応も最新RDBの機能拡張の目玉の一つだ。

 SybaseのASE 12.0は,3つの形式でXMLデータをDBに格納できる(図2[拡大表示])。(1)の「要素保管」は,XMLの要素*をテーブルにマッピングし,XMLデータをテーブルに格納したり,テーブルからXMLデータを生成したりできる。テーブルを基本としているため,格納したデータを通常のSQLで操作できるというメリットがある。その半面,データをマッピング情報に従って入出力する手間はかかる。DBがXML変換機能を提供するため,新たにツールを用意する必要はない。ただし,データを格納するテーブルは,XMLのDTD(文書型定義)*に基づいてユーザーが作成する必要があるため,頻繁に要素が変わるようなXMLデータを利用する場合は相応のコストがかかる。既存テーブルへのXMLデータの入出力を考えるユーザーにとって有効な機能と言える。

 (2)の「ドキュメント保管」は,XMLデータを1つのカラムにテキストとして格納する。データをマッピング情報に従って入出力する作業は不要だが,どうしてもテキスト・ベースの検索が遅くなってしまう。その点は,XMLの階層構造を保ったままデータを格納できる米eXcelonのObjectStoreなどのオブジェクト・データベースに軍配が上がるだろう*3

 Sybaseは,JCS(Java Class in SQL)と呼ぶ独自のJavaクラス群を拡張し,XML対応を実現している。そのため,DBにXMLデータを格納したり,取り出す操作は,それらのJavaのクラスを使う。Oracleも,Javaのクラス群「Oracl XML SQL Utility for Java」を使って同様の操作を行うため,Javaの知識が必要だ。ただし,XML開発キットである「Oracle XML Developer's Kit(XDK)」のコンポーネントの中には,JavaだけでなくPL/SQLやC/C++に対応したものもある*4

性能,可用性の向上は続く

 最新版のRDBは可用性やパフォーマンスの向上にも力を入れている。DBを停止する時間を短縮する,レスポンスを向上させるといった基本機能の改善は,JavaやXMLに比べ地味ではあるが,多くのユーザーがすぐに利用でき,効果を上げられるものである。

 DBの可用性を向上させる方向性は2つある。(1)バックアップなどメンテナンス作業をオンライン状態で可能にし,DBの停止時間を短縮する,(2)DBに障害が発生した際のフェイル・オーバー処理を高速化する,である。 

 OracleやSybaseは以前のバージョンから,オンライン状態でデータをバックアップする機能を備えていたが,「ASE 12では,バックアップ機器の速度に合わせるためブレーキをかけてきたが,これをはずしてオンライン・バックアップの処理を高速化した」(サイベース セールスコンサルティング部 シニアエンジニア 岡田和也氏)。また,SQL Server 2000はオンラインでインデックスを再構成する機能を備えた。さらにDB2 UDBは,「V7のうちに,断片化したデータを再構成するREORG処理を,オンラインで可能にする予定だ」(日本アイ・ビー・エム データ・マネジメント営業推進 技術支援 専任I/Tスペシャリスト 菅原香代子氏)。

図3●分散パーティション・ビューでサーバーの負荷を分散する
SQL Server 2000は,「分散パーティション・ビュー」と呼ぶ機能を備え,1つのデータベースをパーティションに分割することで,サーバーへの負荷を分散できる。ただし,ユーザーが負荷を見積もり,データを適切に分散配置しなければならないため,導入するメリットと作業コストとのトレード・オフを見極めて利用する必要がある
 可用性向上策の2つ目は,複数のサーバー上でDBを稼働させ,障害時にはフェイル・オーバーを行うクラスタリングの機能である。OracleとSybaseはフェイル・オーバーを完了するまでの時間短縮を図った。Oracleの「Oracle Parallel Server(OPS)」はプライマリ/セカンダリ構成をサポートすることで,更新ログ・ファイルの回復作業を単純化し,フェイル・オーバーの時間を短縮した。また,ASE 12は,コンパニオン・サーバーと呼ぶ機能により,サーバーを再起動せずにフェイル・オーバーできるようにした。

 SQL Server 2000も大規模システムへの対応の一環として,クラスタリング機能などを充実させてきた。具体的には,SQL Server 2000 Enterprise Editionで,複数台のサーバーにまたがってDBを稼働させる「分散パーティション・ビュー」という機能を使い,負荷分散が図れる(図3[拡大表示])。この機能は,1つのデータベースをパーティションと呼ぶ単位に分割し,それぞれのサーバーに配置して利用するものだ。さらに,「Windows 2000 Datacenter Server」と組み合わせることで,最大で32プロセッサ,64Gバイトのメモリーを使えるようにし,4ノードのクラスタにも対応した。

(森山 徹=tmoriyam@nikkeibp.co.jp)