第4章 仮想リストビューコントロールを使用して、大規模な検索結果の連続したサブセットを要求する
Directory Server は、LDAP 仮想リストビューコントロールをサポートしています。この制御により、LDAP クライアントは大規模な検索結果の連続したサブセットを要求できます。
たとえば、Directory Server に 100.000 エントリーのアドレス帳を保存したとします。デフォルトでは、すべてのエントリーのクエリーはすべてのエントリーを一度に返します。これはリソースと時間のかかる操作であり、ユーザーが結果をスクロールすると一部のセットしか表示されないため、クライアントはデータセット全体を必要としないことがよくあります。
ただし、クライアントが VLV コントロールを使用する場合、サーバーはサブセットのみを返します。たとえば、ユーザーがクライアントアプリケーションでスクロールすると、サーバーはさらに多くのエントリーを返します。これにより、サーバーの負荷が軽減され、クライアントはすべてのデータを一度に保存して処理する必要がなくなります。
すべての検索パラメーターが固定されている場合、VLV はサーバーでソートされた検索のパフォーマンスも向上させます。Directory Server は、VLV インデックス内の検索結果を事前に計算します。したがって、VLV インデックスは、結果を取得してから後で並べ替えるよりもはるかに効率的です。
Directory Server では、VLV コントロールは常に利用可能です。ただし、大きなディレクトリーで使用する場合は、ブラウジングインデックスとも呼ばれる VLV インデックスを使用すると、速度が大幅に向上します。
Directory Server は、標準インデックスなどの属性の VLV インデックスを維持しません。サーバーは、エントリーに設定された属性とディレクトリーツリー内のそれらのエントリーの場所に基づいて、VLV インデックスを動的に生成します。標準エントリーとは異なり、VLV エントリーはデータベース内の特別なエントリーです。
4.1. ldapsearch コマンドでの VLV コントロールの動作 リンクのコピーリンクがクリップボードにコピーされました!
通常、LDAP クライアントアプリケーションでは仮想リストビュー (VLV) 機能を使用します。ただし、たとえばテスト目的で、ldapsearch ユーティリティーを使用して部分的な結果のみを要求できます。
ldapsearch コマンドで VLV 機能を使用するには、sss (サーバー側の並べ替え) と vlv 検索拡張機能の両方に -E オプションを指定します。
ldapsearch ... -E 'sss=attribute_list' -E 'vlv=query_options'
# ldapsearch ... -E 'sss=attribute_list' -E 'vlv=query_options'
sss 検索拡張機能の構文は次のとおりです。
[!]sss=[-]<attr[:OID]>[/[-]<attr[:OID]>...]
[!]sss=[-]<attr[:OID]>[/[-]<attr[:OID]>...]
vlv 検索拡張機能の構文は次のとおりです。
[!]vlv=<before>/<after>(/<offset>/<count>|:<value>)
[!]vlv=<before>/<after>(/<offset>/<count>|:<value>)
-
beforeは、対象のエントリーの前に返されるエントリーの数を設定します。 -
afterは、対象のエントリーの後に返されるエントリーの数を設定します。 -
index、count、およびvalueは、ターゲットエントリーの決定に役立ちます。valueを設定すると、ターゲットエントリーは、その値で始まる最初の並べ替え属性を持つ最初のエントリーになります。それ以外の場合は、countを0に設定し、ターゲットエントリーはindex値 (1 から開始) によって決定されます。count値が0より大きい場合、ターゲットエントリーはindex * number of entries / countによって決定されます。
例4.1 VLV 検索拡張機能を使用した ldapsearch コマンドの出力
次のコマンドは、ou=People,dc=example,dc=com を検索します。次に、サーバーは結果を cn 属性でソートし、70 番目のエントリーの uid 属性を、オフセットの前の 1 つのエントリーと後の 2 つのエントリーとともに返します。