第4章 検索パフォーマンスの改善 (および読み取りパフォーマンスの調整)
ディレクトリーに対して検索操作を改善する最も効果的な方法は、検索結果の妥当な制限と組み合わせて、エントリーの完全なインデックスを設定することです。
4.1. インデックスの使用
インデックスは、それが意味するように、特定のエントリーに特定の属性が含まれていることを示すタグであり、エントリーに関する他の詳細を含める必要はありません (スペースを節約し、検索結果をより速く返すことができます)。各インデックスは、Directory Server 属性と、その属性を照合する特定の方法を中心に編成されます。
- Presence index (pres) は、どのエントリーに属性が含まれているかを示します。
- Equality index (eq) は、特定の検索文字列に一致する属性値を示します。
- Approximate index (approx) は、文字列と音声的に一致する値を持つエントリーを表示する、効率的な発音類似検索に使用されます。
- Substring index (sub) は、指定の検索文字列に属性値のサブ文字列を照合します。(サーバーを維持するのに非常にコストが高い場合はこのインデックス)
- International index は、マッチングルールを使用して、英語以外の言語の値を含むディレクトリー内の文字列を照合します。
注記
インデックスの詳細は、『Red Hat Directory Server Administration Guide』の『Managing Indexes』を参照してください。
ただし、インデックスを作成するだけでは、サーバーのパフォーマンスは直接向上しません。インデックスを維持すると、サーバーによって維持される各インデックスに対して、変更に含まれる各属性を検証する必要があるため、変更、追加、および削除のすべての操作で Directory Server に負担がかかります。
- Directory Server は add 操作または modify 操作を受け取ります。
- Directory Server は indexing 属性を調べ、属性値に対してインデックスが維持されているかどうかを判断します。
- 作成した属性値がインデックス化されると、Directory Server は新しいインデックスエントリーを生成します。
- サーバーがインデックス化を完了すると、クライアントの要求に応じて実際の属性値が作成されます。
たとえば、Directory Server はエントリーを追加します。
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 for the Z238 line of widgets.
Directory Server は以下のインデックスを維持しています。
cn
(一般名 (common name)) 属性およびsn
(姓 (surname)) 属性の等価、概算、および部分文字列インデックス。- 電話番号属性の等価および部分文字列のインデックス。
- 説明属性の部分文字列インデックス。
そのエントリーをディレクトリーに追加する場合は、Directory Server で以下の手順を実行する必要があります。
- John および John Doe の
cn
等価インデックスエントリーを作成します。 - John および John Doe の適切な
cn
の概算インデックスエントリーを作成します。 - John および John Doe の適切な
cn
部分文字列インデックスエントリーを作成します。 - Doe の
sn
等価インデックスエントリーを作成します。 - Doe に対する
sn
概算インデックスエントリーを作成します。 - Doe に適切な
sn
部分文字列インデックスエントリーを作成します。 - 408 555 8834 に電話番号の等価インデックスエントリーを作成します。
- 408 555 8834 に適切な電話番号の部分文字列インデックスエントリーを作成します。
- Manufacturing lead for the Z238 line of widgets の適切な説明部分文字列インデックスエントリーを作成します。この文字列に対して多数の部分文字列エントリーが生成されます。
新しいインデックスを作成する前に、インデックスを維持するためのオーバーヘッドと、検索パフォーマンスの潜在的な改善とのバランスを調整するようにしてください。特に重要なのは、保持するインデックスの種類を、ディレクトリーに格納されている情報の種類と、ユーザーが日常的に検索する情報の種類に一致させることです。
- 概算インデックスは、通常、数字を含む属性 (電話番号など) には効率的ではありません。
- 部分文字列のインデックスはバイナリー属性では機能しません。
- 等価インデックスは、値が大きい場合に使用しないようにしてください (例: 暗号化データを含む写真やパスワードを含む属性など)。
- 検索であまり使用されない属性のインデックスを維持することは、グローバル検索のパフォーマンスを向上させることなく、オーバーヘッドを増加させます。
- インデックス化されていない属性は、検索要求で依然として指定できますが、検索のタイプによっては検索パフォーマンスが大幅に低下する可能性があります。
- 保守するインデックスが多いほど、必要なディスク領域が多くなります。
注記
インデックスの作成は、検索操作の負荷が高く、変更操作の負荷が低いディレクトリーに対して大きな効果があります。