1 データ・カートリッジの概要

Oracle Databaseには、オブジェクト・モードでのカスタマイズされたアプリケーション開発をサポートするために、データ・カートリッジが用意されています。

Oracleは、リレーショナル・モデルに基づいて順序付けされたデータの効率的でセキュアな管理のみでなく、オブジェクト・モデルに基づいて編成されたデータに対するサポートも提供します。オブジェクト型と、ラージ・オブジェクト(LOB)、外部プロシージャ、拡張可能索引付け、問合せの最適化などの他の機能を使用して、データ・カートリッジと呼ばれる強力で再利用可能なサーバー・ベース・コンポーネントを作成できます。

1.1 データ・カートリッジの概要

データ・カートリッジにより、Oracle Extensibility Architectureフレームワークを利用してOracleサーバーの機能が拡張されます。このフレームワークでは、ユーザー定義データ型の特化されたデータやドメイン固有のデータに関連したビジネス・ロジックおよびプロセスを取得できます。追加の属性を必要とせずに新規の動作を提供するデータ・カートリッジには、ユーザー定義型ではなくパッケージを使用するというオプションもあります。どちらの場合でも、サーバーにおけるアプリケーション・データの解析、格納、取得および索引付けの方法をユーザーが決定することになります。この機能はデータ・カートリッジにパッケージされ、サーバーにプラグインして機能を新規ドメインへと拡張するソフトウェア・コンポーネントが作成されるため、データベース自体が拡張可能になります。

拡張可能データベース管理システムの索引付けおよび問合せ最適化メカニズムをカスタマイズし、ユーザー定義のビジネス・オブジェクトおよび様々な型向けに特化されたサービスやより効率的な処理を提供できます。拡張可能インタフェースを介して実装をサーバーに登録するときに、固有のデフォルト・プロセスのかわりにカスタマイズされた処理指示を実装するようにサーバーに対して指示します。

拡張可能インタフェースは、データ・カートリッジ用に実装されたカスタムの索引付けまたは最適化の動作を実行するために、サーバーがコールするファンクションで構成されます。これらのインタフェースは、Oracleによって定義されています。カートリッジ開発者は、アプリケーションで必要となる特殊な動作を備えたファンクションまたはインタフェースを実装する必要があります。通常、これらのファンクションは、オブジェクト型の静的メソッドとして実装します。拡張可能索引付けインタフェースを実装するオブジェクト型は索引タイプと呼ばれ、拡張可能最適化インタフェースを実装するオブジェクト型は統計タイプと呼ばれます。

データ・カートリッジの主な特性は、次のとおりです。

  • データ・カートリッジはサーバーを基盤としています。構成要素はサーバーに常駐するか、サーバーからアクセスされます。サーバーでは、すべてのデータ・カートリッジ・プロセスが実行されるか、これらのプロセスが外部プロシージャとしてディスパッチされます。

  • データ・カートリッジはサーバーを拡張します。新しい型および動作を定義することで、他の方法では実行できないプロセスを、サーバーがコンポーネント形式で実行できるようにします。データ・カートリッジは、これらの新しい型と動作をアプリケーション内で使用できます。

  • データ・カートリッジはサーバーと統合されます。Oracle拡張フレームワークでは、データ・カートリッジをサーバー・エンジンのコンポーネントと統合する一連のインタフェースが定義されています。これにより、ドメイン固有の索引付け、CPUリソースへのアクセスのドメイン固有の最適化、カートリッジ・データへのI/Oアクセスのドメイン固有の最適化が可能です。

  • データ・カートリッジはパッケージ化されています。データ・カートリッジは、1つの単位としてインストールされます。インストール後のデータ・カートリッジでは、スキーマと権限の検証など、すべてのアクセス問題がユーザーごとに処理されます。

1.2 データ・カートリッジの使用

ほとんどの業界では、そのビジネスの本質を構成する複合データ・オブジェクトを処理するための洗練されたモデルを進化させてきました。このようなデータ・オブジェクトはいずれも、様々な情報単位とそれに対して実行される操作を関連付ける構造です。

データ・オブジェクトに与えられる簡単な名前には、しばしば相当な複雑さが隠されていることがあります。たとえば、銀行業界には多種多様な銀行口座があります。各銀行口座には、顧客の住所、氏名、生年月日などの人口統計情報、残高情報、取引情報および行動ルール(入出金、利払方法など)があります。データ・カートリッジとオブジェクト関連拡張機能を使用すると、アプリケーション・プログラマと独立系ソフトウェア・ベンダーは、Oracleサーバーと統合するソフトウェア・コンポーネントにビジネス・ロジックをカプセル化し、データ型、プロセスおよび論理をサポートするように拡張してビジネス・オブジェクト・モデルを作成できます。

ビジネス・モデルに基づいて開発されるデータ・オブジェクトは複雑さを増していますが、それは情報テクノロジで衛星画像、放射線、動物の鳴き声、地震の震度および化学モデルなどの新しく複雑なデータを作業するために必要とされたためです。現在では複合的なマルチメディア・データ型が頻繁に格納、取得、問合せおよび解析されています。

Webベース・アプリケーションには、常に多種多様な複合データが含まれています。アプリケーション固有のデータ型と関連ビジネス・ロジックを組み込むには、コンテンツが豊富で複数層からなる分散ネットワーク・アプリケーションの新たなクラスが必要です。データ・カートリッジを使用すると、スカラー・データ型と構造化されていないデータ型をドメイン固有のコンポーネント内で併用して、このニーズを満たすことができます。

1.2.1 データ・カートリッジのドメイン

通常、データ・カートリッジはドメイン固有であり、ターゲット・ドメインのコンテンツと有効範囲により特徴付けられています。

コンテンツの場合、データ・カートリッジではスカラー・データ、複合データおよびマルチメディア・データに対応できます。スカラー・データは、INTEGERNUMBERまたはCHARのようなネイティブSQL型を使用してモデル化できます。複合データは、マトリックス、温度および磁気グリッド、複合ドキュメントなどです。構造化されていないマルチメディア・データには、ビデオ、音声およびイメージ・データなどの情報が含まれます。

有効範囲の場合、データ・カートリッジに広範囲な業界間のカバレッジを使用するか、特定の業種向けに特化できます。たとえば、テキスト・ベース・データの一般的な格納と取出しに使用するデータ・カートリッジの有効範囲は複数の業界にまたがりますが、法的支援のための法的書類の格納と取出しに使用するデータ・カートリッジは業界固有のものです。表1-1に、コンテンツと有効範囲に従ってデータ・カートリッジのドメインを分類する方法とその例を示します。

表1-1 データ・カートリッジのドメイン、コンテンツおよび有効範囲

コンテンツ 業界を超えた用途 業界固有の拡張

スカラー・データ

統計の変換

金融および石油

マルチメディア・データおよび構造化されていない複合データ

テキスト

イメージ

オーディオ/ビデオ

空間

法律

医療

放送

公益事業

スカラー・データ型を使用して、より複雑なユーザー定義型を構成することもできます。オブジェクト・リレーショナル・データベース管理システムには、マルチメディア・データと複合データをパッケージする基本的なデータ・カートリッジが用意されています。この種のデータ・カートリッジを使用して、多数の異なる産業にまたがるアプリケーションを開発できます。

  • Oracle Textでは、表示の圧縮、再フォーマットおよび索引付け動作を実装するために、トークン化されたシリアル・バイト・ストリーム・データベース・モデルが使用されます。

  • Oracle Multimediaは、構造化されたラージ・オブジェクト用のデータベース・モデルを使用して、イメージ、音声およびビデオの格納および管理をサポートします。

  • Oracle Spatialは、ジオメトリ・オブジェクト(点、線、多角形)に使用され、投影、回転、変換およびマップ動作を実装します。

カートリッジのドメインに対する関係のもう1つの見方として、基本的なマルチメディア・データ型を拡張可能な基盤ととらえて、これを特定の産業向けにカスタマイズできると考えることもできます。たとえば、医療アプリケーションでは、Oracle Textを記録用に、Oracle MultimediaをMRI結果と心拍数モニター用に、Oracle Spatialを人口統計分析用にカスタマイズできます。

基本的なサービスを提供するカートリッジは、多数の産業にまたがってデプロイできます。また、カートリッジにより業界全体でドメインの専門知識を利用することもできます。このようなカートリッジを、特定の業種向けに特化されたアプリケーション用にさらに拡張できます。

1.3 サーバーの拡張: サービスおよびインタフェース

Oracleサーバーは、基本的なデータ格納、問合せ処理、最適化および索引付けのためのサービスを提供します。アプリケーションでは、これらのサービスを使用してデータベース機能にアクセスします。ただし、データ・カートリッジにはドメイン固有のデータが取り込まれるため、特殊なニーズがあります。これらの特化されたアプリケーションに対応するために、これらの基本的なサービスには拡張性が備わっています。つまり、標準のOracleサービスではデータ・カートリッジの要件を十分に満たすことができない場合に、特定のデータ・カートリッジの要件を満たす追加のサービスを提供できます。各データ・カートリッジでは、このようなサービスの独自実装を提供できます。

たとえば、地理情報システム(GIS)アプリケーション向けの空間データ・カートリッジを開発する場合は、空間索引の作成、索引へのエントリ挿入、索引の更新、索引からの削除、その他の必要な操作を実行するルーチンを実装する必要があります。そのため、サーバーの索引付けサービスを拡張します。

1.3.1 拡張性サービス

拡張可能なサービスおよびOracleの主要な機能と、データ・カートリッジ開発の関係を考えてみます。図1-1は、Oracleサーバーによって実装される標準的なサービスを示しています。

1.3.1.1 拡張可能型システム

Oracle汎用データ・サーバーは、ネイティブ型システム・サービスと拡張可能型システム・サービスの両方を提供します。従来、ほとんどのアプリケーションは、INTEGERNUMBERDATECHARのようなネイティブSQLデータ型で構成される表に格納された企業データのアクセスと変更に焦点を絞っていました。Oracleでは、次のような新しい型のサポートが追加されています。

  • ユーザー定義のオブジェクト型

  • コレクション: VARRAY(可変長配列)およびネストした表など

  • リレーションシップ(REF)

  • ラージ・オブジェクト型(LOB): バイナリ・ラージ・オブジェクト(BLOB)、キャラクタ・ラージ・オブジェクト(CLOB)および外部バイナリ・ファイル(BFILE)など

1.3.1.1.1 ユーザー定義型

ユーザー定義型は、ユーザーが定義する型であることと、基礎となる永続データ(属性)と関連動作(メソッド)の両方を指定することの両面から、ネイティブ・データ型のモデル化機能を拡張します。

ユーザー定義型を使用すると、データ属性をセマンティック動作にバインドして、実際の複合エンティティについて適切なモデルを作成できます。ユーザー定義型には、ぞれぞれ名前と型を持つ1つ以上の属性を指定できます。属性の型は、ネイティブSQL型、LOB、コレクション、別のオブジェクト型またはREF型です。

メソッドは、ユーザー定義型の一部であるプロシージャまたはファンクションです。メソッドは、Oracleサーバーの実行環境内で実行中に、または拡張可能サーバー実行環境の一部としてサーバー外にディスパッチされるときに、その型の属性にアクセスして操作できます。

関連項目:

1.3.1.1.2 コレクション型

コレクションは、複数の要素を含むSQLデータ型です。コレクションの要素(値)は、すべて同じ型の階層からのものです。Oracleでは、複合型のコレクションにVARRAYまたはネストした表を使用できます。

VARRAY型には順序付けされた可変数の要素が含まれ、表の1列またはオブジェクト型の1つの属性に使用できます。VARRAYの要素の型は、NUMBERなどのネイティブ・データ型またはユーザー定義型です。

順序付けされていないコレクションのセマンティクスを提供するには、Oracle SQLを使用してネストした表を作成します。VARRAYの場合と同様に、ネストした表では表の1列またはユーザー定義型の1つの属性を定義できます。

1.3.1.1.3 参照型

Oracleでオブジェクト表を作成する場合は、関連行オブジェクトへのデータベース・ポインタと同様に動作する参照(REF)を取得できます。参照は、オブジェクト・インスタンス間でのナビゲートに重要です。REFは基礎となるオブジェクトIDに依存するため、REFを使用できるのは、オブジェクト表に行として格納されたオブジェクト、またはオブジェクト・ビューから構成されたオブジェクトの場合のみです。

関連項目:

1.3.1.1.4 ラージ・オブジェクト

ラージ・オブジェクト型(LOB)は、イメージ、ビデオ・クリップ、ドキュメントおよび構造化されていない他の形式のデータの格納需要に対応するものです。LOBの格納により、領域要件と有効なアクセスが最適化されます。

LOBは、ロケータと関連バイナリ・データまたは文字データで構成されます。ロケータは、他の表列とインラインで格納されます。内部LOB(BLOBCLOBおよびNCLOB)を使用すると、データを個別のデータベース記憶域に格納できます。外部LOB(BFILE)の場合、データはデータベース表領域外部のオペレーティング・システム・ファイルに格納されます。LONG RAW列は表ごとに1つに制限されていますが、1つの表に複数のLOB列を複数含めることができます。各LOB列を個別の表領域に格納したり、別のセカンダリ・ストレージ・デバイスに格納できます。

Oracle SQLのデータ定義言語(DDL)拡張機能を使用すると、LOBを含む表およびオブジェクト型の作成、変更および削除ができます。Oracle SQLのデータ操作言語(DML)文を使用すると、LOB全体を挿入および削除できます。また、Java、PL/SQLおよびOracle Call InterfaceでLOBのピース単位の読取り、書込みおよび操作を行うための広範囲な文セットも用意されています。

内部LOB型の場合、ロケータと関連データの両方がOracleサーバーのトランザクション・モデルに完全に関与します。BFILEのデータはトランザクションに関与しませんが、BFILEロケータはOracleサーバー・トランザクションで完全にサポートされています。

スカラー数量とは異なり、LOB値は組込み索引付けスキームで索引付けできません。ただし、各種のLOB APIを使用してユーザー定義型のメソッドなどのモジュールを構築し、LOBのコンテンツにアクセスして操作できます。拡張可能索引付けフレームワークを使用して、LOBに常駐するデータのセマンティクスを定義し、このデータを操作できます。

関連項目:

1.3.1.2 拡張可能サーバー実行環境

Oracle型システムでは、ユーザー定義型のメンバー・メソッドの実装が、そのメソッドの仕様から切り離されます。Oracleデータ・カートリッジ・コンポーネントを実装するには、PL/SQL、C、C++またはJavaなど、一般的な多数のプログラミング言語を使用し、ユーザー定義のメソッド、ファンクションおよびプロシージャでデータベース・サーバーのランタイム環境を拡張します。

Javaを使用すると、データ・カートリッジ開発者はデータ・カートリッジの動作について強力な実装を選択できます。PL/SQLは、SQLのオブジェクト拡張機能をすべてサポートしている強力な手続き型言語です。PL/SQLを使用すると、プログラム・ロジックをサーバー上で実行し、ループ、IF-THEN-ELSE句および配列アクセスなど、従来の手続き型言語の操作を実行できます。

PL/SQLとJavaは強力ですが、高速フーリエ変換やイメージ・フォーマット変換のように計算集中型の特定の操作はCプログラムで処理する方が効率的です。C言語プログラムをサーバーからコールして別のアドレス空間で実行できるため、サーバーを隔離して外部プロシージャの失敗による破損からデータベースを保護できます。

ある程度の妥当な制限はありますが、外部プロシージャではOCIを使用してOracleサーバーをコールバックできます。コールバックが特に役立つのは、LOBを処理する場合です。外部プロシージャでコールバックを使用して、データベースに格納されているLOBのピース単位の読取りまたは書込みを実行したり、データベースに索引構成表として格納されているドメイン索引を操作できます。

図1-2 個別のアドレス空間で実行されている外部プログラム

図1-2の説明が続きます。
「図1-2 個別のアドレス空間で実行されている外部プログラム」の説明
1.3.1.3 拡張可能索引付け

基本的なデータベース管理システムは、数値や文字列などの限定的なデータ型セットでB+ツリーやハッシュ索引のようないくつかのタイプのアクセス方法をサポートしています。整数や小さい文字列のような単純データ型の場合、索引付けのすべての側面をデータベース・システムで容易に処理できます。テキスト、空間、イメージ、ビデオおよびオーディオ情報の追加によりデータが複雑になるにつれて、複合データ型と特化された索引付け方法が必要になってきています。

複合データ型には、アプリケーション固有の書式、索引付け要件および選択述語があります。たとえば、多数の異なるドキュメント・エンコーディング方法(ODA、XML、プレーン・テキスト)や情報検索方法(キーワード、全文ブール検索、類似性および確率)があります。同様に、Rツリーは空間データに有効な索引付け方法です。ビジネス要件にあわせて必要な索引タイプを定義できるように、Oracleには拡張可能索引付けフレームワークが用意されています。

この種のユーザー定義索引は、アプリケーション固有のドメイン内のデータに索引付けするため、ドメイン索引と呼ばれます。カートリッジは、索引構造の定義、ロード操作および更新操作中の索引内容のメンテナンス、問合せ処理中の索引の検索を行います。物理索引はOracleデータベースに表として格納するか、外部にファイルとして格納できます。

ドメイン索引はスキーマ・オブジェクトです。このオブジェクトの作成、管理およびアクセスは、索引タイプと呼ばれるユーザー定義型のメソッドとして実装されたルーチンにより実行されます。索引タイプで実装する必要のあるルーチンと、各ルーチンで実行する必要のある操作については、「ドメイン索引の作成」を参照してください。ルーチンの実装はアプリケーション固有であり、カートリッジ開発者が完了しておく必要があります。

拡張可能索引付けを使用する場合、アプリケーションには次のプロセスが必要です。

  • ドメイン索引の構造を定義するプロセス

  • 索引データをOracleデータベースの内部または外部に格納するプロセス

  • 索引データを管理し、取得してユーザー問合せの評価に使用するプロセス

データベース・システムでドメイン索引の物理的な格納を処理する場合、データ・カートリッジには次のプロセスが必要です。

  • 索引のフォーマットおよび内容の定義。カートリッジでは、複合データ・オブジェクトに対応できる索引構造を定義します。

  • ドメイン索引の作成、削除および更新。カートリッジでは、索引構造の作成とメンテナンスを行います。索引はタプルのコレクションとしてモデル化されるため、インプレース更新を直接サポートします。

  • 索引の内容へのアクセスおよび解析。カートリッジは、データベース問合せのコンテンツ関連句を処理することで、問合せ処理の重要なコンポーネントとなります。

標準的なリレーショナル・データベース管理システムやオブジェクト・リレーショナル・データベース管理システムでは、拡張可能索引付けはサポートされていません。そのため、多数のアプリケーションでは、リレーショナル・データベース表にある複合データのファイル・ベース索引がメンテナンスされます。次のタスクを実行するには、相当量のコードと作業が必要です。

  • 外部索引と関連リレーショナル・データとの一貫性の維持

  • 表の値と外部索引が関係する複合問合せのサポート

  • ファイルとデータベースなど、複数形式の永続記憶域を使用したシステムの管理(バックアップ、リカバリ、記憶域割当ての実行など)

拡張可能索引のサポートにより、Oracleサーバーは複合データ型への高性能アクセスを伴うソリューションの開発に必要な作業のレベルを大幅に軽減します。

1.3.1.4 拡張可能オプティマイザ

拡張可能オプティマイザを使用すると、ユーザー定義ファンクションおよび索引により、選択性などの統計情報を収集し、ファンクションのコストを計算し、SQL文の実行計画を生成できます。この情報はオプティマイザで問合せ計画の選択に使用されるため、オプティマイザはユーザー指定情報を使用するように拡張されます。ルールベース・オプティマイザは変更されていません。

オプティマイザにより生成される実行計画には、FROM句の各表へのアクセス方法と、結合順序と呼ばれるFROM句の表の順序付けが含まれています。システム定義のアクセス方法は、索引、ハッシュ・クラスタおよび表スキャンなどです。結合順序に含まれる表ごとに、オプティマイザは一連の結合順序または順列を生成し、それぞれのコストを計算し、最小コストの結合順序を選択することで計画を選択します。結合順序のコストは、アクセス方法のコストと結合方法のコストの合計です。

コスト・モデルは、特定の操作のコスト計算に使用されるアルゴリズムのグループです。このグループには、問合せが実行される物理環境に関する様々なレベルの詳細を含めることができます。現行のコスト・モデルには、軽微な調整が加えられたディスク・アクセス数とネットワーク・コストの見積りが含まれています。

また、オプティマイザは問合せで参照されるオブジェクトの統計を使用して、コストと選択性、つまり、問合せで表から選択される行の割合(0から100 %)を計算します。これらの統計を生成するためのメソッドは、DBMS_STATSパッケージに含まれています。

拡張性により、ユーザーは新しい演算子、索引タイプおよびドメイン索引を定義でき、オプティマイザで実行計画の選択に使用される3つの主要構成要素(統計、選択性およびコスト)を制御できます。

関連項目:

DBMS_STATSの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

1.3.2 拡張可能インタフェース

拡張可能インタフェースには、DBMSインタフェース、カートリッジ基本サービス・インタフェースおよびデータ・カートリッジ・インタフェースという3つのクラスがあります。

DBMSインタフェース

DBMSインタフェースは、最も単純な拡張性サービスを提供します。これらは、SQLまたはOracle Call Interface(OCI)への拡張を介して使用できます。たとえば、拡張可能型マネージャでは、SQLのCREATE TYPE構文を使用します。同様に、拡張可能索引付けでは、索引の指定と操作にDDLおよびDMLサポートが使用されます。

カートリッジ基本サービス・インタフェース

カートリッジ基本インタフェースは、メモリー管理、コンテキスト管理、国際化、カートリッジ固有の管理など、汎用サービスを提供します。サーバーの実行環境に対する新規データ型の動作を実装し、開発者が移植可能で堅牢なサーバー側メソッドを実装する際に役立つルーチンを提供します。

データ・カートリッジ・インタフェース

ユーザー定義の索引タイプを処理するときに、Oracleはデータ・カートリッジ・ファンクションをコールして索引の検索操作またはフェッチ操作を実行します。ユーザー定義の問合せ最適化の場合、問合せオプティマイザはデータ・カートリッジにより実装されたファンクションをコールして、ユーザー定義の演算子またはファンクションのコストを計算します。