0

我目前正忙于学习 LDAP。我的索引有问题。我知道它们是用来提高性能的。但是,我无法理解 LDAP 中索引的工作原理。例如,作为 LDAP 服务器,我正在使用 OpenDJ。在那里,我可以看到属性 sn(姓氏)确实有 5 种不同的索引类型,它们是近似、相等、排序、存在和子字符串。但是,仅选中 Ordering。

4

3 回答 3

4

我无法理解 LDAP 中索引的工作原理。

与数据库中的索引相同。加快查询和更新。可以为任何属性提供索引,但只有那些在搜索中具有特色的属性才应该被索引。您可以比 DBMS 更放弃索引 LDAP 数据库,因为假定的 read::write 比率要高得多,通常为 9::1 或更高,而 RDBMS 为 3::1,因此插入索引的成本和更新相对少很多。

例如,作为 LDAP 服务器,我正在使用 OpenDJ。在那里,我可以看到属性 sn(姓氏)确实有 5 种不同的索引类型,它们是近似、相等、排序、存在和子字符串。

这些对应于您可以在LDAP 搜索过滤器中使用的不同运算符:

  filter     = "(" filtercomp ")"
    filtercomp = and / or / not / item
    and        = "&" filterlist
    or         = "|" filterlist
    not        = "!" filter
    filterlist = 1*filter
    item       = simple / present / substring / extensible
    simple     = attr filtertype value
    filtertype = equal / approx / greater / less
    equal      = "="
    approx     = "~="
    greater    = ">="
    less       = "<="
    extensible = attr [":dn"] [":" matchingrule] ":=" value
                 / [":dn"] ":" matchingrule ":=" value
    present    = attr "=*"
    substring  = attr "=" [initial] any [final]
    initial    = value
    any        = "*" *(value "*")
    final      = value
    attr       = AttributeDescription from Section 4.1.5 of [1]
    matchingrule = MatchingRuleId from Section 4.1.9 of [1]
    value      = AttributeValue from Section 4.1.6 of [1]

但是,仅选中 Ordering。

您的意思是在某些管理 GUI 中仅选择了此选项吗?如果是这样,则只为该属性维护一个传统的排序索引。这可以用于所有运营商,但据称速度较慢。[就我个人而言,我一直不明白为什么 LDAP 实现者认为他们完全从事数据库业务,不使用标准数据库,并坚持提供自己的数据库。]

于 2016-05-04T23:30:20.603 回答
2

当客户端请求目录搜索操作时,客户端会向服务器发送一个过滤器表达式,例如 (&(uid= jensen )(l=Stavanger))。然后,服务器使用适用的索引来查找具有可能与搜索匹配的属性值的条目。如果没有适用的索引,则服务器可能必须遍历所有条目以查找候选匹配项。

浏览所有条目对于大型目录来说是资源密集型的。出于这个原因,默认情况下为目录根用户保留未索引搜索权限,允许用户请求不存在适用索引的搜索。

资源

于 2017-03-06T10:49:17.600 回答
-2

LDAP 索引可以被认为是数据库索引。索引正在提高复杂 LDAP 搜索请求的性能。我希望这有帮助。

于 2016-05-04T21:07:22.563 回答