8 Oracle Unified Directory索引モデルの理解

Oracle Unified Directoryでは、複数の索引のタイプがサポートされます。この項では、索引タイプおよび検索が実行される方法についてさらに学習します。

この項では、次の項目について説明します。

索引の構成の詳細は、「ディレクトリ・データへの索引付け」を参照してください。

8.1 索引の概要

Oracle Unified Directoryは、索引を使用して、参照情報をOracle Unified Directoryエントリに関連付けることによって、検索操作を高速化します。各検索操作には、返すエントリを指定する検索キーが含まれます。検索操作中に、サーバーは索引を使用して、検索キーに一致するエントリを見つけます。索引が構成されていない場合、サーバーはすべてのエントリの接尾辞をチェックして、検索キーに一致する可能性があるエントリを特定する必要があります。

ディレクトリ内のすべてのエントリをチェックすることは、特に大規模ディレクトリの場合に、リソースを大量に消費します。さらに、権限を持たないユーザーは、索引付けされていない検索の実行を許可されない可能性があります。索引なし検索を実行する特権の割当ての詳細は、「rootユーザーと特権サブシステムの理解」を参照してください。検索の効率を高めるために、クライアントが実行する必要がある検索に対応する索引を構成できます。

この項では、次の項目について説明します。

8.1.1 索引について

索引は、検索条件に一致するエントリを効率的に見つけるためにディレクトリ・サーバー・データベースで使用するメカニズムです。索引は、検索キーをIDリストにマップします。IDリストは、その索引キーに一致するエントリのエントリIDの集合です。

検索操作中に、Directory Serverは索引を使用して、索引キーと一致するエントリを検索します。索引がないと、Directory Serverでは、一致を検索するために、接尾辞のすべてのエントリをチェックすることが必要となります。

8.1.2 索引の重要性の理解

索引は、検索操作のパフォーマンスの向上において重要な役割を果たします。Directory Serverの索引を利用することで、検索文字列とディレクトリの内容を関連付け、検索が速くなります。

  • ディレクトリ・サーバーに対する検索操作を向上させる最も効率的な方法は、索引を構成し、検索結果に対する索引エントリ制限を定義することです。

  • 索引にはエントリの指定した属性の値のみが格納され、エントリに関する他の詳細は格納されません。これにより領域が節約され、その属性を中心に索引を編成することによって検索が速くなります。索引が付けられている属性で検索を実行する場合、Oracle Unified Directoryはすぐに索引を特定して、検索条件に一致するエントリを探します。

8.2 サポートされている索引タイプ

索引は、データ・アクセスを高速化するためのオプションの構造です。Oracle Unified Directoryでは様々な索引タイプをサポートしています。

次の表に、索引のタイプを示します。

表8-1 サポートされている索引タイプ

索引のタイプ 説明

近似索引

近似索引は、検索フィルタで指定されている値と似ている値を比較するために使用します。近似索引の目的は、検索フィルタに似た値に一致するエントリを特定することです。たとえば、cn属性の近似索引を使用した場合、クライアント・アプリケーションは、名前のつづりが間違っていてもエントリを見つけることができます。

等価索引

等価索引は、検索フィルタで指定されている値と正確に一致するエントリを特定します。等価索引は、対応する等価一致ルールが存在する属性にのみ付けることができます。

順序付き索引

順序付き索引は、属性値の相対順序を記録します。等価索引に似ていますが、等価一致ルールではなく、順序付け一致ルールを使用して値を正規化する点が異なります。順序付け索引は、対応する順序付け一致ルールを持たない属性に対しては維持できません。

プレゼンス索引

プレゼンス索引は、指定されている属性の少なくとも1つの値を持つエントリを記録します。属性ごとにプレゼンス索引キーは1つのみ存在し、そのIDリストには、指定されている属性を含むすべてのエントリのエントリIDが含まれます。ACIを使用してエントリを高速検索できるように、aci属性にはデフォルトでプレゼンス索引が付けられています。

部分文字列索引

部分文字列索引は、特定の部分文字列が含まれるエントリを記録します。部分文字列索引の索引キーは、属性値から取得した6文字の部分文字列で構成され、対応する値であるIDリストには、それらの部分文字列を含むエントリのエントリIDが含まれます。属性の部分文字列一致ルールを使用して、索引キーの値を正規化します。部分文字列一致ルールを持たない属性には、部分文字列索引を定義できません。

8.3 索引エントリ制限とは

索引エントリ制限は構成制限です。

索引エントリ制限は、指定された索引キーと一致可能なエントリの最大数(つまり、IDリストの最大サイズ)の制御に使用できます。サーバー内のエントリと高い割合で一致する索引キーを維持するために、パフォーマンスの影響を制限するメカニズムを提供します。大きなIDリストを必要とする可能性がある場合は、索引なし検索を実行すると、索引を使用するよりも速度を向上できる場合がよくあります。

8.4 検索の評価メカニズムの理解

LDAP検索操作を処理するために、サーバーは検索フィルタの各アサーションを適用して候補エントリのリストを生成し、このリストを結合して候補エントリIDの初期セットを構成します。

候補セットが作成されている場合、検索は索引付きであると見なされます。各候補エントリがエントリ・データベースからフェッチされ、検索範囲とフィルタに一致した場合はクライアントに返されます。

候補セットが作成されていない場合(索引が存在しないか、または一部の索引値が索引エントリ制限を超えているため)、検索は索引付けされていないと見なされます。この場合、範囲内のすべてのレコードを反復処理するためにベース・エントリでDNデータベースに対するカーソルがオープンされ、検索ベースの下のエントリをすべて処理するまで対応するエントリをフェッチおよびフィルタします。

索引から取得した候補エントリIDの数が10以下であることが判明した時点で、候補数を減らす処理は終了します。かわりに、索引データベースの読取りを続けるよりも速いという前提で、それらのエントリがすぐにエントリ・データベースからフェッチおよびフィルタ処理されます。この場合、最初のコンポーネントが最も厳しい条件であるようなAND検索で、期待する結果が得られる可能性があります。

また、検索のANDフィルタは、評価に時間がかかるコンポーネント(以上、以下)が、通常はそれより高速なコンポーネント(たとえば、等価)よりも後に評価されるように再配置されます。

8.5 索引の管理

索引はコマンドを実行することによって管理できます。

索引を管理する場合、次の重要なポイントがあります。

  • verify-indexコマンドを実行して、索引とディレクトリ・サーバー・データベース内のエントリ・データの間の一貫性をチェックします。

    コマンドの詳細は、「verify-index」を参照してください

  • 新しい索引を作成したか、または索引のindex-entry-limitプロパティが変更された場合、rebuild-indexコマンドを実行して、ディレクトリ・サーバーの索引を再構築します。

    コマンドの詳細は、「rebuild-index」を参照してください

  • 仮想リスト表示(VLV)索引を構成します。これは、VLVコントロールを使用して効率的に検索を処理するためにディレクトリ・サーバー・データベースで使用するメカニズムです。VLV索引は特定の問合せおよびソート・パラメータを使用して、仮想一覧表示が実行されることを効率的にサーバーに通知します。また、この索引は、仮想一覧表示をより迅速に使用するために必要な情報の収集および維持をサーバーができるようにします。VLV索引には、ソートされたIDリストのブロックが格納されます。このリストは、エントリIDとエントリのソート対象の属性値のセットです。

    VLV索引の構成の詳細は、「VLV索引の構成」を参照してください。

  • 拡張一致検索フィルタを使用して検索操作を高速化するために、拡張一致索引を構成します。索引キーは指定した一致ルールを使用して正規化された値であり、対応するIDリストにはその一致ルールに従って値に一致するすべてのエントリのエントリIDが含まれます。

    拡張一致検索フィルタの詳細は、「拡張可能な一致検索フィルタ」を参照してください。