4

有没有一种好方法只检索 LDAP 查询的前 N ​​个结果,以节省服务器负载并增加响应时间?

例如,用例是基于渐进式 AJAX 的名称选择器(通过 LDAP 到 HTTP 网关,该网关希望将查询大小限制为支持 LDAP 目录),它将查找以用户迄今为止键入的字母开头的所有结果。

使用 .NET 4.5 System.DirectoryServices.Protocols 的示例代码将不胜感激,但这不是必需的,因为如果我知道实际的协议要求是什么,我就可以弄清楚如何发送请求。

4

3 回答 3

3

这正是 Java PagedResultsControl的用途。.NET中也有一个。这些东西为你实现了协议,只提供了一个 API。

于 2013-04-14T00:18:08.103 回答
2

EJP的好答案。请注意,虽然 LDAP 客户端可以很容易地将自己限制为前 N 个结果,但从搜索返回的排序条目是不可重复的。也就是说,搜索结果中返回的条目顺序不仅没有定义,而且不保证重复,即使在同一连接毫秒后也是如此。对排序敏感的 LDAP 客户端可能会遇到故障或无法解释的结果。

于 2013-04-14T22:53:50.060 回答
0

对于您的特定目的(自动完成建议),我会使用 ldap sizelimit 而不是分页结果。区别如下:

尺寸限制

您对前 xx 个对象感兴趣。你不关心其余的,你也不需要其余的。

分页结果

您对所有对象感兴趣,但您希望以每页xx 个对象的批次/页的形式检索它们。您最终可能需要从服务器获取所有对象。

这里明显的开销是,对于分页结果,服务器必须记住您的搜索状态并在您请求下一页时适当地恢复它。由于这对于自动完成列表通常是不必要的(除非您希望可以选择进一步按需扩展自动完成列表),因此您可以使用 sizelimit 比使用分页结果为您的服务器节省一些额外的负载。

我不是 .NET 程序员,但谷歌发现了这个,你可能会感兴趣:
system.directoryservices.directorysearcher.sizelimit

有关更多详细信息,您还可以查看 RFC 页面(在此处搜索 sizelimit):
rfc1777

于 2013-04-15T00:49:55.057 回答