第6章 Directory Server でのインデックスの管理


インデックス付けは、属性または値を分類および整理することにより、情報の検索と取得を容易にします。仮想リストビューコントロールを使用することで、大規模な検索結果の連続したサブセットを要求できます。

6.1. インデックスの概要

Directory Server のインデックスの種類と、インデックスを使用する場合のメリットとデメリットについて説明します。

6.1.1. インデックスの種類

Directory Server は、インデックス付きの各属性のインデックスを、インスタンスのデータベースディレクトリー内の個別のデータベースファイルに保存します。たとえば、sn 属性のインデックスは、/var/lib/dirsrv/slapd-<instance_name>/db/database_name/sn.db ファイルに格納されています。Directory Server が 1 つの属性に対して異なるインデックスを維持している場合、各インデックスファイルには複数のインデックスタイプを含めることができます。

Directory Server は以下のインデックスタイプをサポートしています。

  • 存在インデックス (pres) は、特定の属性を含むエントリーのリストです。たとえば、attribute=mail のようにクライアントが頻繁に検索を行う場合はこのタイプを使用します。
  • 等価インデックス (eq) により、特定の属性値を含むエントリーの検索が改善されます。たとえば、cn 属性に等価インデックスを設定すると、cn=first_name last_name の検索を高速に行うことができます。
  • 近似インデックス (approx) は、効率的な近似検索や類似検索を可能にします。たとえば、cn~=first_name last_namecn~=first_name、または cn~=first_nam (スペルミスに注意) を検索すると、cn=first_name X last_name というエントリーが返されます。Directory Server の metaphone 表音アルゴリズムは US-ASCII 文字のみをサポートします。したがって、近似インデックスは、英語の値でのみ使用してください。
  • 部分文字列インデックス (sub) は、維持するためのコストがかかるインデックスですが、エントリー内の部分文字列を効率的に検索できます。部分文字列のインデックスは、各エントリーの最小 3 文字に制限されます。たとえば、telephoneNumber=*555* と検索すると、telephoneNumber 属性に 555 を含む値を持つディレクトリー内のすべてのエントリーが返されます。
  • 国際インデックスは、国際ディレクトリー内の情報の検索を迅速化します。国際インデックスの作成プロセスは、通常のインデックスを作成するプロセスと似ています。ただし、オブジェクト識別子 (OID) をインデックス化する属性に関連付けることで一致するルールを適用する点が異なります。

6.1.2. インデックスのメリットとのバランス

新しいインデックスを作成する前に、インデックスを維持することのメリットとコストのバランスを考えてみます。

  • 近似インデックスは、通常、数字を含む属性 (電話番号など) には効率的ではありません。
  • 部分文字列のインデックスはバイナリー属性では機能しません。
  • イメージなど、大きな値を含む属性の等価インデックスは回避してください。
  • 検索で一般的に使用されない属性のインデックスを維持すると、検索パフォーマンスを向上させることなくオーバーヘッドが増加します。
  • インデックス化されていない属性は、検索要求で依然として使用できますが、検索のタイプによっては検索パフォーマンスが大幅に低下する可能性があります。

インデックスは、非常に時間がかかります。たとえば、Directory Server が追加操作を受け取った場合、Directory Server はインデックス属性を調べて、属性値に対してインデックスが維持されているかどうかを判断します。作成された属性値がインデックス化されている場合、Directory Server は新しい属性値をインデックスに追加し、その後、実際の属性値がエントリーに作成されます。

例6.1 ユーザーがエントリーを追加する際に Directory Server が行うインデックス作成手順

Directory Server が以下のインデックスを維持していると仮定します。

  • cn および sn 属性の等価、近似、および部分文字列インデックス。
  • telephoneNumber 属性の等価および部分文字列のインデックス。
  • description 属性の部分文字列インデックス。

たとえば、ユーザーが次のようなエントリーを追加したとします。

dn: cn=John Doe,ou=People,dc=example,dc=com
objectclass: top
objectClass: person
objectClass: orgperson
objectClass: inetorgperson
cn: John Doe
cn: John
sn: Doe
ou: Manufacturing
ou: people
telephoneNumber: 408 555 8834
description: Manufacturing lead
Copy to Clipboard Toggle word wrap

ユーザーがエントリーを追加すると、Directory Server は以下のステップを実行します。

  1. John および John Doecn 等価インデックスエントリーを作成します。
  2. JohnJohn Doecn 近似インデックスエントリーを作成します。
  3. John および John Doecn 部分文字列インデックスエントリーを作成します。
  4. Doesn 等価インデックスエントリーを作成します。
  5. Doe に対する sn 近似インデックスエントリーを作成します。
  6. Doesn 部分文字列インデックスエントリーを作成します。
  7. 408 555 8834telephoneNumber 等価インデックスエントリーを作成します。
  8. 408 555 8834telephoneNumber 部分文字列インデックスエントリーを作成します。
  9. Manufacturing leaddescription 部分文字列インデックスエントリーを作成します。

この例は、大規模なディレクトリーのデータベースを作成および保守するために必要なアクションの数が、非常に多くのリソースを消費する可能性があることを示しています。

重要

Directory Server のパフォーマンスに影響を与える可能性があるため、メンバーシップ属性 (memberuniquemember など) の部分文字列インデックスを定義しないでください。メンバーを追加または削除する場合 (たとえば、多数のメンバーを持つグループに uniquemember を追加する場合)、uniquemember の部分文字列インデックスの計算では、追加または削除された値だけでなく、すべての uniquemember 値を評価する必要があります。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat