Abrufen großer Resultsets

Wenn die Möglichkeit besteht, dass das zurückgegebene Resultset mehr als 1.000 Elemente enthält, müssen Sie eine seitenseitige Suche verwenden. Suchvorgänge von Active Directory, die ohne Paging ausgeführt werden, sind auf die Rückgabe von maximal 1.000 Datensätzen beschränkt. Bei einer seitenseitigen Suche wird das Resultset als einzelne Seiten dargestellt, die jeweils eine vordefinierte Anzahl von Ergebniseinträgen enthalten. Bei dieser Art der Suche werden neue Seiten mit Ergebniseinträgen zurückgegeben, bis das Ende des Resultsets erreicht ist.

Standardmäßig berechnet der Server, der auf eine Abfrageanforderung antwortet, ein Resultset vollständig, bevor Daten zurückgegeben werden. In einem großen Resultset erfordert dies Serverspeicher, wenn das Resultset abgerufen wird, und Netzwerkbandbreite, wenn das große Ergebnis zurückgegeben wird. Das Festlegen einer Seitengröße ermöglicht es dem Server, die Daten in Seiten zu senden, während die Seiten erstellt werden. Der Client speichert diese Daten dann zwischen und stellt einen Cursor zum Code auf Anwendungsebene bereit. Das Paging wird festgelegt, indem definiert wird, wie viele Zeilen der Server berechnet, bevor die Daten über das Netzwerk an den Client zurückgegeben werden.

Die seitenseitige Suche bietet Sowohl für den Client als auch für den Server Vorteile. Beispielsweise kann der Client bei der Präsentation der Ergebnisse für Endbenutzer reaktionsfähiger sein. Dies ist insbesondere für grafische Benutzeroberflächentools relevant, die Daten anzeigen können, während ein anderer Thread gleichzeitig mehr Daten vom Server empfängt.

Wenn Sie beim Einrichten der Abfrage eine Sortierreihenfolge für Das Resultset angeben, muss der Server das Resultset vollständig berechnen, bevor die Daten an den Client zurückgegeben werden, was sich auf die Antwortzeit für die Abfrage auswirkt.

Auf der Serverseite macht die seitenseitige Suche den Vorgang skalierbar. Wenn beispielsweise hundert Clients gleichzeitig Suchanforderungen ausgeben und im Durchschnitt jeder Client zweihundert Objekte zurückgegeben wird, muss der Server über genügend Arbeitsspeicher verfügen, um den vollständigen Resultset von 20.000 Einträgen zu speichern. Wenn jeder Client eine Seitengröße von zehn Objekten angibt, würden die Arbeitsspeicheranforderungen auf dem Server um den Faktor 20 reduziert.

Hinweis

Nicht alle Verzeichnisdienste unterstützen ausgelagerte Suchvorgänge. Active Directory implementiert eine Seitenformatarchitektur.

 

Viele Verzeichnisserver geben einen administrativen Grenzwert für die maximale Anzahl von Objekten an, die zurückgegeben werden können, wenn ein Client die Seitengröße nicht angibt. Wenn das administrative Limit erreicht ist, generiert ADSI den ERROR_DS_ADMIN_LIMIT_EXCEEDED Win32-Fehler.

Auf der Clientseite ermöglicht eine ausgelagerte Suche einem Client, den Vorgang zu beenden, während er noch ausgeführt wird. Im Gegensatz dazu wird bei einer Nicht-Auslagerungssuche der Client blockiert, bis die Daten vollständig zurückgegeben werden oder ein Fehler auftritt. Dies kann sich auf die Netzwerkleistung auswirken, wenn sich der Resultset als größer herausstellt und mehr Zeit als erwartet in Anspruch nimmt.

Im Auftrag des Clients verarbeitet ADSI die Seitengröße transparent. Der Client muss nicht die Anzahl der objekte zählen, die in Bearbeitung sind. ADSI kapselt die Serverinteraktion für den Client. Aus Sicht des Clients gibt die Suche ein vollständiges Resultset zurück.

Weitere Informationen zur Verwendung der Suchtimeoutoption mit einer bestimmten Suchschnittstelle finden Sie unter:

Eine seitenseitige Suche ist für Ihre Anwendung transparent, da ADSI automatisch weitere Ergebnisseiten abruft, bis sie das Ende des Resultsets oder das Ende des von Ihnen festgelegten Zeitlimits erreicht. Wenn Sie eine seitenseitige Suche verwenden, überschreibt die Größenbeschränkung die Seitengröße nicht. Die Größenbegrenzung kann nur verwendet werden, wenn Sie ein Resultset abrufen, das weniger als 1.000 Einträge enthält.