使用LDAP查询检索前N个结果是否有好办法,以节省服务器负载并增加响应时间?
例如,用例是基于渐进式AJAX的名称选择器(通过LDAP到HTTP网关,它希望将查询大小限制到后备LDAP目录),它将查找以用户键入的字母开头的所有结果到目前为止。
使用.NET 4.5 System.DirectoryServices.Protocols的示例代码将不胜感激,但不是必需的,因为如果我知道实际的协议要求是什么,我可以弄清楚如何发送请求。
答案 0 :(得分:3)
这正是Java PagedResultsControl的用途。 .NET中也有一个。这些东西为您实现协议,只提供API。
答案 1 :(得分:2)
EJP的答案很好。请注意,虽然LDAP客户端可以很容易地将自己限制为前N个结果,但从搜索返回的排序条目不可重复。也就是说,搜索结果中返回的条目顺序不仅没有定义,也不能保证重复,即使在几毫秒后的同一连接上也是如此。对订购敏感的LDAP客户端可能会遇到故障或无法解释的结果。
答案 2 :(得分:0)
出于特定目的(自动填充建议),我会使用ldap sizelimit而不是分页结果。这是区别:
尺寸限制
您对第一个xx对象感兴趣。你不关心其余的事情,你不需要休息。
分页结果
您对 ALL 对象感兴趣,但您希望每页的xx对象批量/ 页检索它们。您最终可能需要从服务器获取所有对象。
这里的明显开销是,对于分页结果,服务器必须记住您的搜索状态,并在您请求下一页时适当地恢复它。由于这对于自动完成列表通常是不必要的(除非您希望能够按需扩展自动完成列表),您可以使用sizelimit为服务器节省一些额外负载而不是使用分页结果。
我不是.NET程序员,但谷歌发现了这一点,它可能对你很感兴趣:
system.directoryservices.directorysearcher.sizelimit
有关详细信息,您可能还会看到RFC页面(在那里搜索sizelimit):
rfc1777