Oracleは、リレーショナル・モデルに基づいて順序付けされたデータの効率的でセキュアな管理のみでなく、オブジェクト・モデルに基づいて編成されたデータに対するサポートも提供します。オブジェクト型と、ラージ・オブジェクト(LOB
)、外部プロシージャ、拡張可能索引付けおよび問合せ最適化のような他の機能を使用して、データ・カートリッジと呼ばれる強力で再利用可能なサーバー・ベース・コンポーネントを作成できます。
この章の内容は、次のとおりです。
データ・カートリッジにより、Oracle Extensibility Architectureフレームワークを利用してOracleサーバーの機能が拡張されます。このフレームワークでは、ユーザー定義データ型の特化されたデータやドメイン固有のデータに関連したビジネス・ロジックおよびプロセスを取得できます。新規の動作を提供し、新規の属性を必要としないデータ・カートリッジには、ユーザー定義型ではなくパッケージを使用するというオプションもあります。どちらの場合でも、サーバーにおけるアプリケーション・データの解析、格納、取得および索引付けの方法をユーザーが決定することになります。この機能はデータ・カートリッジにパッケージされ、サーバーにプラグインして機能を新規ドメインへと拡張するソフトウェア・コンポーネントが作成されるため、データベース自体が拡張可能になります。
拡張可能データベース管理システムの索引付けおよび問合せ最適化メカニズムをカスタマイズし、ユーザー定義のビジネス・オブジェクトおよび様々な型向けに特化されたサービスやより効率的な処理を提供できます。拡張可能インタフェースを介して実装をサーバーに登録するときに、固有のデフォルト・プロセスのかわりにカスタマイズされた処理指示を実装するようにサーバーに対して指示します。
拡張可能インタフェースはファンクションで構成されており、サーバーはこれらのファンクションをコールして、データ・カートリッジ用に実装されたカスタムの索引付けまたは最適化動作を実行します。インタフェースはOracleにより定義されています。カートリッジ開発者は、アプリケーションで必要な特化された動作を持つファンクションまたはインタフェースを実装する必要があります。通常は、ファンクションをオブジェクト型の静的メソッドとして実装します。拡張可能索引付けインタフェースを実装するオブジェクト型は索引タイプと呼ばれ、拡張可能最適化インタフェースを実装するオブジェクト型は統計タイプと呼ばれます。
データ・カートリッジはサーバー・ベースです。構成要素はサーバーに常駐するか、サーバーからアクセスされます。サーバーでは、すべてのデータ・カートリッジ・プロセスが実行されるか、これらのプロセスが外部プロシージャとしてディスパッチされます。
データ・カートリッジによりサーバーが拡張されます。データ・カートリッジでは新規の型と動作が定義されます。これにより、他の方法では使用できなかったプロセスをサーバーでコンポーネント・フォームで実行できます。データ・カートリッジにより、これらの新規の型と動作をそのアプリケーションで使用できます。
データ・カートリッジはサーバーと統合されています。Oracle拡張フレームワークでは、データ・カートリッジをサーバー・エンジンのコンポーネントと統合する一連のインタフェースが定義されています。これにより、ドメイン固有の索引付け、CPUリソースへのアクセスのドメイン固有の最適化、カートリッジ・データへのI/Oアクセスのドメイン固有の最適化が可能です。
データ・カートリッジはパッケージされています。データ・カートリッジは1単位としてインストールされます。インストール後のデータ・カートリッジでは、スキーマと権限の検証など、すべてのアクセス問題がユーザーごとに処理されます。
ほとんどの産業では、そのビジネスの本質を構成する複合データ・オブジェクトを処理するための洗練されたモデルを進化させてきました。このようなデータ・オブジェクトはいずれも、様々な情報単位とそれに対して実行される操作を関連付ける構造です。
データ・オブジェクトに与えられる簡単な名前には、しばしば相当な複雑さが隠されていることがあります。たとえば、銀行業界には多種多様な銀行口座があります。各銀行口座には、顧客の住所、氏名、生年月日などの人口統計情報、残高情報、取引情報および行動ルール(入出金、利払方法など)があります。データ・カートリッジとオブジェクト関連拡張機能を使用すると、アプリケーション・プログラマと独立系ソフトウェア・ベンダーは、Oracleサーバーと統合するソフトウェア・コンポーネントにビジネス・ロジックをカプセル化し、データ型、プロセスおよび論理をサポートするように拡張してビジネス・オブジェクト・モデルを作成できます。
ビジネス・モデルに基づいて開発されるデータ・オブジェクトは複雑さを増していますが、それは情報テクノロジで衛星画像、放射線、動物の鳴き声、地震の震度および化学モデルなどの新しく複雑なデータを作業するために必要とされたためです。現在では複合的なマルチメディア・データ型が頻繁に格納、取得、問合せおよび解析されています。
Webベース・アプリケーションには、常に多種多様な複合データが含まれています。アプリケーション固有のデータ型と関連ビジネス・ロジックを組み込むには、コンテンツが豊富で複数層からなる分散ネットワーク・アプリケーションの新たなクラスが必要です。データ・カートリッジを使用すると、スカラー・データ型と構造化されていないデータ型をドメイン固有のコンポーネント内で併用して、このニーズを満たすことができます。
通常、データ・カートリッジはドメイン固有であり、ターゲット・ドメインのコンテンツと有効範囲により特徴付けられています。
コンテンツの場合、データ・カートリッジではスカラー・データ、複合データおよびマルチメディア・データに対応できます。スカラー・データは、INTEGER
、NUMBER
またはCHAR
のようなネイティブSQL型を使用してモデル化できます。複合データは、マトリックス、温度および磁気グリッド、複合ドキュメントなどです。構造化されていないマルチメディア・データには、ビデオ、音声およびイメージ・データなどの情報が含まれます。
有効範囲の場合、データ・カートリッジに広範囲な業界間のカバレッジを使用するか、特定の業種向けに特化できます。たとえば、テキスト・ベース・データの一般的な格納と取出しに使用するデータ・カートリッジの有効範囲は複数の業界にまたがりますが、法的支援のための法的書類の格納と取出しに使用するデータ・カートリッジは業界固有のものです。表1-1に、コンテンツと有効範囲に従ってデータ・カートリッジのドメインを分類する方法とその例を示します。
表1-1 データ・カートリッジのドメイン、コンテンツおよび有効範囲
コンテンツ | 業界間で使用 | 業界固有の拡張機能 |
---|---|---|
スカラー・データ |
統計の変換 |
金融および石油 |
マルチメディア・データおよび構造化されていない複合データ |
テキスト |
イメージ |
オーディオ/ビデオ |
空間 |
法律 |
医療 |
放送 |
公益事業 |
スカラー・データ型を使用して、より複雑なユーザー定義型を構成することもできます。オブジェクト・リレーショナル・データベース管理システムには、マルチメディア・データと複合データをパッケージする基本的なデータ・カートリッジが用意されています。この種のデータ・カートリッジを使用して、多数の異なる産業にまたがるアプリケーションを開発できます。
テキスト・カートリッジでは、表示の圧縮、再フォーマットおよび索引付け動作を実装するために、トークン化されたシリアル・バイト・ストリーム・データベース・モデルが使用されます。
イメージ・カートリッジでは、構造化ラージ・オブジェクトのデータベース・モデルを使用して、圧縮、トリミング、拡大縮小、回転および再フォーマット動作が実装されます。
空間カートリッジは、ジオメトリ・オブジェクト(点、線および多角形)に使用され、投影、回転、変換およびマップ動作を実装します。
ビデオ・カートリッジでは、構造化ラージ・オブジェクト・データベース・モデルを使用して、シリアル(動的)イメージ・データ圧縮、再生、巻戻しおよび一時停止動作がサポートされます。
カートリッジとドメインの関係を示すには、基本的なマルチメディア・データ型を、特定の産業向けにカスタマイズできる拡張可能な基礎とみなす方法もあります。たとえば、医療用アプリケーションでは、レコード用にテキスト・カートリッジ、MRIの結果用にイメージ・カートリッジ、心拍数のモニター用にオーディオ・カートリッジ、人口統計分析用に空間カートリッジをカスタマイズできます。
基本的なサービスを提供するカートリッジは、多数の産業にまたがってデプロイできます。また、カートリッジにより業界全体でドメインの専門知識を利用することもできます。このようなカートリッジを、特定の業種向けに特化されたアプリケーション用にさらに拡張できます。
Oracleサーバーは、基本的なデータ格納、問合せ処理、最適化および索引付けのためのサービスを提供します。アプリケーションでは、これらのサービスを使用してデータベース機能にアクセスします。ただし、データ・カートリッジにはドメイン固有のデータが取り込まれるため、特殊なニーズがあります。このように特化されたアプリケーションに対応するために、これらの基本的サービスは拡張可能になっています。つまり、標準的なOracleサービスでデータ・カートリッジの要件を満たせない場合は、特定のデータ・カートリッジの付加的要件を満たすサービスを追加提供できます。各データ・カートリッジでは、このようなサービスの独自実装を提供できます。
たとえば、地理情報システム(GIS)アプリケーション向けの空間データ・カートリッジを開発する場合は、空間索引の作成、索引へのエントリ挿入、索引の更新、索引からの削除、その他の必要な操作を実行するルーチンを実装する必要があります。そのため、サーバーの索引付けサービスを拡張します。
この項では、データ・カートリッジ開発に関連するOracleの主機能に重点を置いて、拡張可能サービスについて説明します。図1-2に、Oracleサーバーにより実装される標準サービスを示します。
Oracle汎用データ・サーバーは、ネイティブ型システム・サービスと拡張可能型システム・サービスの両方を提供します。従来、ほとんどのアプリケーションは、INTEGER
、NUMBER
、DATE
およびCHAR
のようなネイティブSQLデータ型で構成される表に格納された企業データのアクセスと変更に焦点を絞っていました。Oracleでは、次のような新しい型のサポートが追加されています。
ユーザー定義オブジェクト型
コレクション: VARRAY
(可変長配列)およびネストした表など
リレーションシップ(REF
)
ラージ・オブジェクト型(LOB
): バイナリ・ラージ・オブジェクト(BLOB
)、キャラクタ・ラージ・オブジェクト(CLOB
)および外部バイナリ・ファイル(BFILE
)など
ユーザー定義型は、ユーザーが定義する型であることと、基礎となる永続データ(属性)と関連動作(メソッド)の両方を指定することの両面から、ネイティブ・データ型のモデル化機能を拡張します。
ユーザー定義型を使用すると、データ属性をセマンティック動作にバインドして、実際の複合エンティティについて適切なモデルを作成できます。ユーザー定義型には、ぞれぞれ名前と型を持つ1つ以上の属性を指定できます。属性の型は、ネイティブSQL型、LOB
、コレクション、別のオブジェクト型またはREF
型です。
関連項目
|
メソッドは、ユーザー定義型の一部であるプロシージャまたはファンクションです。メソッドは、Oracleサーバーの実行環境内で実行中に、または拡張可能サーバー実行環境の一部としてサーバー外にディスパッチされるときに、その型の属性にアクセスして操作できます。
コレクションは、複数の要素を含むSQLデータ型です。コレクションの要素(値)は、すべて同じ型の階層からのものです。Oracleでは、複合型のコレクションにVARRAY
またはネストした表を使用できます。
VARRAY
型には順序付けされた可変数の要素が含まれ、表の1列またはオブジェクト型の1つの属性に使用できます。VARRAY
の要素の型は、NUMBER
などのネイティブ・データ型またはユーザー定義型です。
順序付けされていないコレクションのセマンティクスを提供するには、Oracle SQLを使用してネストした表を作成します。VARRAY
の場合と同様に、ネストした表では表の1列またはユーザー定義型の1つの属性を定義できます。
Oracleでオブジェクト表を作成する場合は、関連行オブジェクトへのデータベース・ポインタと同様に動作する参照(REF
)を取得できます。参照は、オブジェクト・インスタンス間でのナビゲートに重要です。REF
は基礎となるオブジェクトの識別に依存するため、REF
を使用できるのはオブジェクト表に行として格納されたオブジェクト、またはオブジェクト・ビューから構成されたオブジェクトの場合のみです。
関連項目
|
ラージ・オブジェクト型(LOB
)は、イメージ、ビデオ・クリップ、ドキュメントおよび構造化されていない他の形式のデータの格納需要を処理します。LOB
の格納により、領域要件と有効なアクセスが最適化されます。
LOB
は、ロケータと関連バイナリ・データまたは文字データで構成されます。ロケータは、他の表列とインラインで格納されます。内部LOB
(BLOB
、CLOB
および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
に常駐するデータのセマンティクスを定義し、このデータを操作できます。
関連項目
|
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
のピース単位の読取りまたは書込みを実行したり、データベースに索引構成表として格納されているドメイン索引を操作できます。
基本的なデータベース管理システムは、数値や文字列などの限定的なデータ型セットでB+ツリーやハッシュ索引のようないくつかのタイプのアクセス方法をサポートしています。整数や小さい文字列のような単純データ型の場合、索引付けのすべての側面をデータベース・システムで容易に処理できます。テキスト、空間、イメージ、ビデオおよびオーディオ情報の追加によりデータが複雑になるにつれて、複合データ型と特化された索引付け方法が必要になってきています。
複合データ型には、アプリケーション固有の書式、索引付け要件および選択述語があります。たとえば、多数の異なるドキュメント・エンコーディング方法(ODA、XML、プレーン・テキスト)や情報検索方法(キーワード、全文ブール検索、類似性および確率)があります。同様に、Rツリーは空間データに有効な索引付け方法です。ビジネス要件にあわせて必要な索引タイプを定義できるように、Oracleには拡張可能索引付けフレームワークが用意されています。
この種のユーザー定義索引は、アプリケーション固有のドメイン内のデータに索引付けするため、ドメイン索引と呼ばれます。カートリッジは、索引構造の定義、ロード操作中と更新操作中の索引コンテンツのメンテナンス、および問合せ処理中の索引の検索を受け持ちます。物理索引はOracleデータベースに表として格納するか、外部にファイルとして格納できます。
ドメイン索引はスキーマ・オブジェクトです。このオブジェクトの作成、管理およびアクセスは、索引タイプと呼ばれるユーザー定義型のメソッドとして実装されたルーチンにより実行されます。索引タイプで実装する必要のあるルーチンと、各ルーチンで実行する必要のある操作については、第8章「ドメイン索引の作成」を参照してください。ルーチンの実装はアプリケーション固有であり、カートリッジ開発者が完了しておく必要があります。
拡張可能索引付けを使用する場合、アプリケーションには次のプロセスが必要です。
ドメイン索引の構造を定義するプロセス
索引データをOracleデータベースの内部または外部に格納するプロセス
索引データを管理し、取得してユーザー問合せの評価に使用するプロセス
データベース・システムでドメイン索引の物理的な格納を処理する場合、データ・カートリッジには次のプロセスが必要です。
索引の書式とコンテンツを定義するプロセス。カートリッジでは、複合データ・オブジェクトに対応できる索引構造を定義します。
ドメイン索引を作成、削除および更新するプロセス。カートリッジでは、索引構造の作成とメンテナンスを行います。索引はタプルのコレクションとしてモデル化されるため、インプレース更新を直接サポートします。
索引のコンテンツにアクセスして解析するプロセス。カートリッジは、データベース問合せのコンテンツ関連句を処理することで、問合せ処理の重要なコンポーネントとなります。
標準的なリレーショナル・データベース管理システムやオブジェクト・リレーショナル・データベース管理システムでは、拡張可能索引付けはサポートされていません。そのため、多数のアプリケーションでは、リレーショナル・データベース表にある複合データのファイル・ベース索引がメンテナンスされます。次のタスクを実行するには、相当量のコードと作業が必要です。
外部索引と関連リレーショナル・データとの一貫性の維持
表の値と外部索引が関係する複合問合せのサポート
ファイルとデータベースなど、複数形式の永続記憶域を使用したシステムの管理(バックアップ、リカバリ、記憶域割当ての実行など)
拡張可能索引のサポートにより、Oracleサーバーは複合データ型への高性能アクセスを伴うソリューションの開発に必要な作業のレベルを大幅に軽減します。
拡張可能オプティマイザを使用すると、ユーザー定義ファンクションおよび索引により、選択性などの統計情報を収集し、ファンクションのコストを計算し、SQL文の実行計画を生成できます。この情報はオプティマイザで問合せ計画の選択に使用されるため、オプティマイザはユーザー指定情報を使用するように拡張されます。ルールベース・オプティマイザは変更されていません。
オプティマイザにより生成される実行計画には、FROM
句の各表へのアクセス方法と、結合順序と呼ばれるFROM
句の表の順序付けが含まれています。システム定義のアクセス方法は、索引、ハッシュ・クラスタおよび表スキャンなどです。結合順序に含まれる表ごとに、オプティマイザは一連の結合順序または順列を生成し、それぞれのコストを計算し、最小コストの結合順序を選択することで計画を選択します。結合順序のコストは、アクセス方法のコストと結合方法のコストの合計です。
コスト・モデルは、特定の操作のコスト計算に使用されるアルゴリズムのグループです。このグループには、問合せが実行される物理環境に関する様々なレベルの詳細を含めることができます。現行のコスト・モデルには、軽微な調整が加えられたディスク・アクセス数とネットワーク・コストの見積りが含まれています。
また、オプティマイザは問合せで参照されるオブジェクトの統計を使用して、コストと選択性、つまり、問合せで表から選択される行の割合(0〜100 %)が計算されます。これらの統計を生成するためのメソッドは、DBMS_STATS
パッケージに含まれています。
拡張性により、ユーザーは新しい演算子、索引タイプおよびドメイン索引を定義でき、オプティマイザで実行計画の選択に使用される3つの主要構成要素(統計、選択性およびコスト)を制御できます。
関連項目 DBMS_STATS の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。 |
拡張可能インタフェースには、DBMSインタフェース、カートリッジ基本サービス・インタフェースおよびデータ・カートリッジ・インタフェースという3つのクラスがあります。
DBMSインタフェースは、最も単純な拡張性サービスを提供します。これらは、SQLまたはOracle Call Interface(OCI)への拡張を介して使用できます。たとえば、拡張可能型マネージャでは、SQLのCREATE
TYPE
構文を使用します。同様に、拡張可能索引付けでは、索引の指定と操作にDDLおよびDMLサポートが使用されます。