什么是LDAP索引以及它们如何工作?

时间:2016-01-12 12:20:37

标签: ldap opendj

我目前正忙于学习LDAP。我有索引问题。我知道它们用于改善性能。但是,我无法理解LDAP中索引的工作原理。例如,作为LDAP服务器,我正在使用OpenDJ。在那里,我可以看到属性sn(surname)确实有5种不同的索引类型,即近似,Equality,Ordering,Presence和Substring。但是,仅检查订购。

3 个答案:

答案 0 :(得分:3)

  

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

与数据库中的索引相同。加快查询和更新速度。可以为任何属性提供索引,但只应对搜索中的功能进行索引。您可以使用比DBMS更多的放弃索引LDAP数据库,因为假定的read :: write比率要高得多,通常为9 :: 1或更高,而RDBMS为3 :: 1,因此对插入和索引进行索引的成本较高更新相对少得多。

  

例如,作为LDAP服务器,我正在使用OpenDJ。在那里,我可以看到属性sn(surname)确实有5种不同的索引类型,它们是近似的,Equality,Ordering,Presence和Substring。

这些对应于您可以在LDAP search filter中使用的不同运算符:

  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]
  

但是,仅检查订购。

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

答案 1 :(得分:1)

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

查看所有条目对于大型目录来说是资源密集型的。因此,默认情况下,为目录root用户保留unindexed-search特权,允许用户请求不存在适用索引的搜索。

Source

答案 2 :(得分:-1)

LDAP索引可以被视为数据库索引。索引正在改进复杂LDAP搜索请求的性能。我希望,这有帮助。