检索大型结果集

如果返回的结果集可能包含超过 1000 个项目,则必须使用分页搜索。 在不进行分页的情况下搜索 Active Directory 时,最多只能返回前 1000 条记录。 通过分页搜索,结果集会以单个页面的形式呈现,每个页面都包含预定数量的结果条目。 使用此类型的搜索将返回结果条目的新页面,直到到达结果集的末尾。

默认情况下,响应查询请求的服务器在返回数据前会完全计算结果集。 在大型结果集中,获取结果集时需要使用服务器内存,而返回大型结果时需要使用网络带宽。 设置页面大小可以让服务器在创建页面时以页面为单位发送数据。 然后,客户端会缓存这些数据,并向应用程序层代码提供一个光标。 分页是通过定义服务器在通过网络向客户端返回数据前计算多少行来设置的。

分页搜索对客户端和服务器都有好处。 例如,客户端在向最终用户展示结果时可以更加迅速。 这与图形用户界面工具尤为相关,因为这些工具可以在另一个线程同时从服务器接收更多数据的情况下显示数据。

在设置查询时,如果你为结果集指定了排序顺序,则服务器在向客户端返回数据前必须完全计算结果集,而这将影响查询的响应时间。

在服务器端,分页搜索使操作具有可扩展性。 例如,如果一百个客户端同时发出搜索请求,平均每个客户端返回两百个对象,倘若不指定页面大小,则服务器必须有足够的内存来容纳 20,000 个条目组成的完整结果集。 另外,如果每个客户端指定的页面大小为 10 个对象,则服务器的内存需求将减少 20 倍。

注意

并非所有目录服务都支持分页搜索。 Active Directory 会实现页面大小体系结构。

 

如果客户未指定页面大小,许多目录服务器都会为其可返回的最大对象数量指定一个管理限制。 在达到管理限制时,ADSI 会生成 ERROR_DS_ADMIN_LIMIT_EXCEEDED Win32 错误。

在客户端,分页搜索允许客户端在操作仍在进行时停止操作。 相比之下,在非分页搜索中,客户端将被阻止,直到数据完全返回或发生错误。 如果结果集变大且花费的时间超过预期,则可能会影响网络性能。

ADSI 代表客户端以透明方式处理页面大小。 客户端不必对正在进行的对象数进行计数。 ADSI 为客户端封装了服务器交互。 从客户的角度来看,搜索会返回一个完整的结果集。

有关在特定搜索界面上使用搜索超时选项的详细信息,请参阅:

分页搜索对应用程序是透明的,因为 ADSI 会自动继续检索更多的结果页,直到结果集结束或设置的时间限制结束。 使用分页搜索时,大小限制不会覆盖页面大小。 大小限制只能在检索结果集包含少于 1000 个条目时使用。