上一页      目录      索引      文档主页      下一页     
iPlanet Directory Server 5.1 管理员指南



第 10 章   管理索引


iPlanet Directory Server 部署指南 引入了索引的概念,并说明随 iPlanet Directory Server 一起提供的索引的利弊和不同类型。本章首先介绍搜索算法,以便说明引入索引机制的环境,然后介绍如何创建、删除和管理索引。本章包含以下几部分:



关于索引

本部分概述 Directory Server 中的索引。其中包含下列主题:


关于索引类型

索引存储在目录数据库的文件中。文件的名称以索引属性为基础,而非文件中所包含的索引类型。如果为特定的属性维护有多个索引,则每个索引文件均可包含多种类型的索引。例如,所有为通用名属性保持的索引都包含在 cn.db3 文件中。

Directory Server 支持以下类型的索引:

  • 存在索引 (pres)

    存在索引中包含具有特定属性的条目列表。在诸如检查包含访问控制信息的条目等情况下,该索引较为有用。生成包括存在索引的 aci.db3 文件可以有效地进行 ACI=* 搜索,从而为服务器生成访问控制列表。

    存在索引不用于基本对象的搜索。

  • 等同索引 (eq)

    等同索引可以有效地搜索含有特定属性值的条目。例如,cn 属性的等同索引允许用户更为有效地搜索 cn=Babs Jensen

  • 近似索引 (approx)

    近似索引可以执行有效的近似或“大致”搜索。例如,一个条目包含属性值 cn=Robert E Lee。针对 cn~=Robert Lee、cn~=Robert 或 cn~=Lee 的近似搜索将会返回该值。同样,针对 l~=San Fransisco (注意拼写有误)进行搜索将返回包含 l=San Francisco 的条目。

  • 子字符串索引 (sub)

子字符串索引是一种维护代价较高的索引,但它可以有效地搜索条目内的子字符串。

例如,下列形式的搜索:

cn=*derson

将匹配包含诸如以下字符串的通用名:

Bill Anderson
Jill Anderson
Steve Sanderson

同样,搜索

telephonenumber= *555*

将返回目录中包含电话号码 555 的所有条目。



注意 对于每个条目而言,子字符串索引被限制为最少两个字符。



  • 国际索引

    国际索引可以加速国际目录中信息的搜索。除了通过将区域设置 (OID) 与要所索引的属性进行关联而应用匹配规则外,创建国际索引的过程与创建常规索引的过程类似。

    有关受支持的区域设置及其相关 OID 的列表,请参阅附录 D“国际化”。如果要将目录服务器配置为接受其它匹配规则,请与 iPlanet 专业服务联系

  • 浏览(虚拟列表视图)索引

    浏览索引虚拟列表视图索引,用于加速显示 iPlanet Directory Server Console 中的条目。该索引在目录分支中包含大量条目的情况下特别有用(例如 ou=people 分支)。可以在目录树的任何分支点上创建浏览索引,从而改善显示性能。这通过 iPlanet Directory Server Console 或使用 /usr/sbin/directoryserver vlvindex 命令来实现。


关于缺省索引、系统索引及标准索引

安装 iPlanet Directory Server ,每个数据库实例都将创建一组缺省索引和系统索引。为维护这些索引,目录使用标准索引


缺省索引概述

尽管应在删除缺省索引前确保企业内没有服务器插件或其它服务器依赖于该索引,但仍可根据索引的实际需要而修改缺省索引。

下表列出随目录一起安装的缺省索引:


表 10-1    缺省索引

属性

Eq

Pres

Sub

用途

cn  

X  

X  

X  

改善最常见的用户目录搜索性能。  

givenName  

X  

X  

X  

改善最常见的用户目录搜索性能。  

mail  

X  

X  

X  

改善最常见的用户目录搜索性能。  

mailHost  

X  

 

 

用于 iPlanet Messaging Server。  

member  

X  

 

 

改善 iPlanet 服务器性能。该索引也用于参照完整性插件。请参阅“保持参照完整性”以了解详细信息。  

owner  

X  

 

 

改善 iPlanet 服务器性能。该索引也用于参照完整性插件。请参阅 iPlanet Directory Server 管理员指南 以了解详细信息。  

seeAlso  

X  

 

 

改善 iPlanet 服务器性能。该索引也用于参照完整性插件。请参阅“保持参照完整性”以了解详细信息。  

sn  

X  

X  

X  

改善最常见的用户目录搜索性能。  

telephoneNumber  

X  

X  

X  

改善最常见的用户目录搜索性能。  

uid  

X  

 

 

改善 iPlanet 服务器性能。  

uniquemember  

X  

 

 

改善 iPlanet 服务器性能。该索引也用于参照完整性插件。请参阅“保持参照完整性”以了解详细信息。  


系统索引概述

系统索引为无法删除或修改的索引。它们是目录正常工作所必需的。下表列出随目录提供的系统索引:


表 10-2    系统索引

属性

Eq

Pres

用途

aci  

 

X  

允许目录服务器快速获得数据库中所维护的访问控制信息。  

dnComp  

X  

 

用于帮助加速目录中的子树搜索。  

objectClass  

X  

 

用于帮助加速目录中的子树搜索。  

entryDN  

X  

 

基于 DN 搜索而加快条目检索。  

parentID  

X  

 

在一级搜索过程中提高目录性能。  

numSubordinates  

 

X  

供 iPlanet Directory Server Console 用于提高“目录”选项卡上的显示性能。  

nsUniqueID  

X  

 

用于搜索特定条目。  


标准索引概述

由于需要维护缺省索引和其它内部索引机制,因此 iPlanet Directory Server 还维护某些标准索引文件。默认情况下存在下列标准索引,您无需创建这些索引:

  • id2entry.db3 — 包含实际的目录数据库条目。可以从该索引重建其它所有数据库文件。

  • id2children.db3 — 限制一级搜索(即检查条目直接子项的搜索)的范围。

  • dn.db3 — 控制子树搜索的范围;也就是检查条目及其下属子树中所有条目的搜索。

  • dn2id.db3 — 通过将条目的特异名称映射为其 ID 号而有效地启动所有搜索。


搜索算法概述

索引用于加速搜索。了解目录中索引的用法将有助于了解搜索算法。每个索引中都包含一个属性列表(例如 cn、通用名、属性)及对应于每个值的条目指针。iPlanet Directory Server 按如下所示处理搜索请求:

  1. LDAP 客户机应用程序(例如 Netscape Communicator 或 iPlanet Directory Server Console)向目录发送搜索请求。

  2. 目录将检查进入的请求,以确保指定的基本 DN 匹配其一个或多个数据库或数据库链接中所含的后缀。

    • 如果确实匹配,目录就会处理该请求。

    • 如果不匹配,则目录将向客户机返回一条错误信息,指示后缀不匹配。如果 cn=config 下的 nsslapd-referral 属性中指定了引荐,则目录还返回 LDAP URL,客户机可利用它来尝试追踪请求。

  3. 如果单个索引即可满足每个数据库属性的搜索请求,则服务器将读取该索引以生成潜在的匹配项列表。

    如果属性无索引,则目录将生成一个包含数据库中所有条目的候选列表。这会使搜索速度变得相当慢。(对于服务器正在使用的索引关键字而言,如果已设置“所有 ID 令牌”,则目录也会执行上述操作。有关“所有 ID” 的信息,请参阅“管理索引”。)

    如果搜索请求包含多个属性,则目录将查询多个索引,然后将候选条目的结果列表组合起来。

  4. 如果属性有索引,则目录将从索引文件中以条目 ID 号序列的格式提取出候选匹配项。

  5. 目录将使用返回的条目 ID 号读取 id2entry.db3 文件中相应的条目。目录服务器随即检查每个候选条目,以查看是否有条目与搜索标准相匹配。每找到一个匹配条目,目录就将该条目返回给客户机。

    目录将继续进行操作,直到检查了所有候选条目,或者达到下列属性中所设的限制:

    • nsSizeLimit - 指定搜索操作所返回的最大条目数。如果达到该限制,目录将返回已找到的、与搜索请求相匹配的所有条目,同时返回超过该条目限制的错误消息。

    • nsTimeLimit - 指定分配给搜索请求的秒数最大值。如果达到该限制,目录将返回已找到的、与搜索请求相匹配的所有条目,同时返回超过时间限制的错误消息。

    • nsLookthroughLimit - 指定为响应搜索请求而检查候选条目时,目录将检查的最大条目数。

有关这些属性的详细信息,请参阅 iPlanet Directory Server 配置、命令和文件参考指南

此外,目录还使用变音位语音算法的变体来执行近似索引搜索。每个值都被视为单词的序列,同时还为每个单词生成音标代码。



注意 iPlanet Directory Server 中的变音位语音算法仅支持 US-ASCII 字母。因此,近似索引仅能与英文值一起使用。



近似搜索中输入的值将被近似地转换为音标代码序列。如果下列两个条件都为真,则认为条目与查询匹配:

  • 所有查询字符串代码均与条目字符串中生成的代码相匹配。

  • 所有查询字符串代码的顺序与条目字符串代码的顺序相同。

例如,下表说明几个查询如何匹配条目名称 Alice B. Sarette,其语音代码为 ALS B SRT


表 10-3    用音标代码近似搜索

查询字符串

音标代码

匹配注释

Alice Sarette  

ALS SRT  

匹配。代码顺序正确。  

Alice Sarrette  

ALS SRT  

匹配。尽管 Sarette 拼写有误,但代码顺序正确。  

Surette  

SRT  

匹配。尽管 Sarette 拼写有误,但生成的代码包含于原名称中。  

Bertha Sarette  

BR0 SRT  

不匹配。代码 BR0 在原名称中不存在。  

Sarette, Alice  

SRT ALS  

不匹配。代码顺序不正确。  


权衡索引的利弊

创建新索引以前,请权衡维护索引的利弊得失。请记住:

  • 近似索引对于通常包含数字(例如电话号码)的属性而言效率不高。

  • 子字符串索引对于二进制属性无效。如果值很大(例如属性中计划包含照片或带加密数据的口令),则应避免使用等同索引。

  • 如果为搜索中不常用的属性维护索引,则管理费用会增大,而全局搜索性能并不会得到改善。

  • 根据搜索类型的不同,尽管搜索性能可能会显著降低,但仍然可在搜索请求中指定未索引的属性。

  • 请记住:维护的索引越多,需要的磁盘空间就越多。

下例详尽描述了索引对时间的消耗程度。考虑创建特定属性的过程:

  1. 目录服务器收到添加或修改操作。

  2. 目录服务器检查索引属性,以确定是否为属性值维护索引。

  3. 如果创建的属性值已有索引,则目录服务器将生成新的索引条目。

  4. 服务器完成索引后,将根据客户机的请求而创建实际的属性值。

例如,假设系统要求目录服务器添加条目

dn: cn=Bill Pumice, ou=People, o=siroe.com
objectclass: top
objectClass: person
objectClass: orgperson
objectClass: inetorgperson
cn: Bill Pumice
cn: Bill
sn: Pumice
ou: Manufacturing
ou: people
telephonenumber: 408 555 8834
description: Manufacturing lead for the Z238 line.

不妨进一步假设目录服务器在维护下列索引:

  • 通用名和姓氏属性的等同、近似和子字符串索引

  • 电话号码属性的等同和子字符串索引

  • 说明属性的子字符串索引

为将该条目添加到目录中,目录服务器必须执行以下步骤:

  1. 为“Bill”和“Bill Pumice”创建通用名等同索引条目。

  2. 为“Bill”和“Bill Pumice”创建合适的通用名近似索引条目。

  3. 为“Bill”和“Bill Pumice”创建合适的通用名子字符串索引条目。

  4. 为“Pumice”创建姓氏等同索引条目。

  5. 为“Pumice”创建合适的姓氏近似索引条目。

  6. 为“Pumice”创建合适的姓氏子字符串索引条目。

  7. 为“408 555 8834”创建电话号码等同索引条目。

  8. 为“408 555 8834”创建合适的电话号码子字符串索引条目。

  9. 为“Manufacturing lead for the Z238 line of widgets.”创建合适的说明子字符串索引条目。此时将为该字符串生成大量的子字符串条目。

本例表明索引的成本比较高。



创建索引



本节讲述如何使用 iPlanet Directory Server Console 和命令行而为特定的属性创建存在、等同、近似、子字符串和国际索引。它还介绍创建浏览索引的分步过程。



注意 鉴于 iPlanet Directory Server 5.1 可以在单数据库或多数据库环境中运行,因此需要记住应在每个数据库实例中创建新索引,因为新建的索引不会在其它数据库中被自动创建。

但是,缺省索引会在后续数据库实例中自动出现并被维护,而不被添加现有的数据库实例中换句话说,目录会使用后续数据库中最近创建的缺省索引集。这意味着:如果将缺省索引添加到第二个数据库实例中,则该索引不会在第一个数据库实例中被维护,而是在所有后续实例中被维护。



本部分包括以下过程:


从服务器控制台创建索引

使用 iPlanet Directory Server Console 可以为特定的属性创建存在、等同、近似、子字符串和国际索引。

要创建索引:

  1. 在 iPlanet Directory Server Console 上,选择“配置”选项卡。

  2. 展开数据节点,再展开要创建索引的数据库的后缀,然后选择该数据库。

  3. 在右侧窗口中,选择“索引”选项卡。



    注意 不要单击“数据库设置”节点,因为这样做将转到缺省索引设置窗口,而不是转到为每个数据库配置索引的窗口。



  4. 如果要创建索引的属性已在“附加索引”表中列出,请跳到步骤 6。否则,单击“添加属性”。

    此时出现的对话框中包含服务器模式中所有的可用属性列表。

  5. 选择要创建索引的属性,然后单击“确定”。

    服务器将把属性添加到“附加索引”表中。

  6. 选中要为每个属性维护所有索引类型对应的复选框。

  7. 如果要为非英语语言创建索引,则输入要在“匹配规则”字段中使用的对照顺序之 OID。

    通过列出由逗号分隔(无空格)的多个 OID,可以使用多种语言来为属性创建索引。有关语言列表、其相关 OID 及关于对照顺序的详细信息,请参阅附录 D“国际化”。

  8. 单击“保存”。

    此时出现索引对话框,其中显示索引创建状态并通知创建索引的时间。可单击“状态日志”框以查看所创建索引的状态。创建完索引后,单击“关闭”以退出该索引对话框。

对于目录中新添的数据和现有数据而言,新索引将立即处于活动状态。此时无须重新启动服务器。


从命令行创建索引

从命令行可以创建特定属性的存在、等同、近似、子字符串和国际索引。

从命令行创建索引包括两个步骤:

  • 使用 ldapmodify 命令行实用程序添加新的索引条目或编辑现有的索引条目。

  • 运行 /usr/sbin/directoryserver db2index-task 命令,生成由服务器维护的新的索引集。



    注意 由于 iPlanet Directory Server 中的系统索引属于硬编码,因此无法创建新的系统索引。



下列部分介绍创建索引的步骤。


添加索引条目

使用 ldapmodify 将新的索引属性添加到目录中。如果要创建将成为缺省索引的新索引,请将新索引属性添加到 cn=default indexes,cn=config,cn=ldbm database, cn=plugins,cn=config 条目中。

要为特定的数据库创建新索引,请将其添加到 cn=index,cn=instanceName,cn=ldbm database,cn=plugins,cn=config 条目中,其中 cn=instanceName 对应于数据库的名称。



注意 应避免在 dse.ldif 文件中的 cn=config 条目下创建条目。cn=config 条目存储在简单的、平面化的 dse.ldif 配置文件中,而不象一般条目那样存储在同一个、具有高度伸缩性的数据库中。因此,如果有许多条目,尤其是可能要经常更新的条目储存在 cn=config 下面,则性能将会受到严重影响。

然而,虽然由于性能原因不推荐在 cn=config 下存储简单的用户条目,但是将诸如目录管理员条目或复制管理器(供给器绑定 DN)等特殊的用户条目储存在 cn=config 下很有用,因为这可以将配置信息集中起来。



有关添加条目时所需的 LDIF 更新语句的信息,请参阅“LDIF 更新语句”

例如,假设要为 Siroe1 数据库中的 sn (姓氏)属性创建存在、等同和子字符串索引。

如下所示,运行 ldapmodify 命令行实用程序:

ldapmodify -a -h server.siroe.com -p 389 \
-D "cn=Directory Manager" -w
password

ldapmodify 实用程序将绑定到服务器并准备向配置文件中添加条目。有关 ldapmodify 命令行实用程序的详细信息,请参阅 iPlanet Directory Server 配置、命令和文件参考指南

接着,为新索引添加以下条目:

dn: cn=sn,cn=index,cn=Siroe1,cn=ldbm database,cn=plugins,cn=config
objectClass: top
objectClass:nsIndex
cn:sn
nsSystemIndex:false
nsIndexType:pres
nsIndexType:eq
nsIndexType:sub
nsMatchingRule:2.16.840.1.113730.3.3.2.3.1

cn 属性包含要创建索引的属性的名称,本例中为 sn 属性。该条目是 nsIndex 对象类的成员。nsSystemIndex 属性为 false,指示该索引不是 Directory Server 操作所必需的。多值 nsIndexType 属性指定存在 (pres)、等同 (eq) 和子字符串 (sub) 索引。请注意,每个关键字都必须在单独的行上输入。nsMatchingRule 属性指定保加利亚语对照顺序的 OID。

nsIndexType 属性中指定无值的索引条目时,将维护特定属性的所有索引(国际索引除外)。例如,假设为新的 sn 索引指定以下条目:

dn: cn=sn,cn=index,cn=instance,cn=ldbm database,cn=plugins,cn=config
objectClass: top
objectClass:nsIndex
cn:sn
nsSystemIndex:false
nsIndexType:

该新条目会建立 sn(姓氏)属性的所有索引。

nsIndexType 属性中使用关键字 none 可指定不维护该属性的任何索引。例如,假设要临时禁用刚在 Siroe1 数据库中创建的 sn 索引,按如下所示将 nsIndexType 变换为 none

dn: cn=sn,cn=index,cn=Siroe1,cn=ldbm database,cn=plugins,cn=config
objectClass:top
objectClass:nsIndex
cn:sn
nsSystemIndex:false
nsIndexType:none

有关对照顺序及其 OID 的完整列表,请参阅附录 D“国际化”。

有关索引配置属性的详细信息,请参阅 iPlanet Directory Server 配置、命令和文件参考指南



注意 创建索引时,应始终使用属性的主要名称(而非属性的别名)。属性的主要名称就是模式中为属性列出的第一个名称,例如 uiduserid 属性的主要名称。有关所有属性的主要名称及别名的列表,请参阅表 10-6




运行 db2index-task 命令

创建完索引条目或将附加索引类型添加到现有的索引条目中后,即可运行 /usr/sbin/directoryserver db2index-task 命令以生成由 iPlanetDirectory Server 维护的新索引集。一旦运行该命令,对于目录中新添的数据及现有的数据而言,新的索引集即处于活动状态。

命令如下:

# /usr/sbin/directoryserver db2index-task

下面的例子将创建一个索引。

#!/bin/sh
/usr/sbin/directoryserver db2index-task \
-D "cn=Directory Manager" -w password -n Database1 -t sn


表 10-4    示例中所用的 db2index-task 选项说明

选项

说明

-D

 

指定目录管理员的 DN。  

-w

 

指定目录管理员的口令。  

-n

 

指定数据库名称,该数据库包含要创建索引的条目。  

-t

 

指定要建立索引的数据库的属性名称。  


从服务器控制台创建浏览索引

要使用 iPlanet Directory Server Console 创建浏览索引:

  1. 在 iPlanet Directory Server Console 中,选择“目录”选项卡。

  2. 在左侧导航树中选择要为其创建索引的条目(例如 People),然后从“对象”菜单中选择“创建浏览索引”。

    也可在导航树中选择并右键单击要为其创建索引的条目,然后从弹出菜单中选择“创建浏览索引”。

  3. 此时出现“创建浏览索引”对话框,其中显示索引创建状态。可单击“状态日志”框以查看所创建索引的状态。

  4. 单击“关闭”以退出“创建浏览索引”对话框。

    对于添加到目录中的所有新数据而言,新索引将立即处于活动状态。此时无须重新启动服务器。


从命令行创建浏览索引

从命令行创建浏览索引(或称虚拟列表视图 (VLV) 索引)涉及下面两个步骤:

  • 使用 ldapmodify 添加新的浏览索引条目或编辑现有的浏览索引条目。

  • 运行 /usr/sbin/directoryserver vlvindex 命令,生成由服务器维护的新的浏览索引集。

下列部分介绍创建浏览索引所涉及的步骤。


添加浏览索引条目

所要创建的浏览索引条目的类型与要加速的 ldapsearch 属性排序类型有关。考虑以下几点至关重要:

  • 搜索范围(base、one、sub)。

  • 搜索的基础(用作搜索起点的条目)。

  • 所要排序的属性。

  • 搜索过滤器。有关指定搜索过滤器的详细信息,请参阅附录 B“查找目录条目”。

  • 构成搜索基的条目所属的 ldbm 数据库。



    注意 您只能在 ldbm 数据库中创建浏览索引。



例如:假设您想在 Siroe1 数据库中的 "dc=siroe,dc=com" 条目上创建浏览索引,从而加速 ldapsearch。其中,搜索基是 "dc=siroe,dc=com",搜索过滤器是 (|(objectclass=*)(objectclass=ldapsubentry)), 范围是 one,而返回属性的排序顺序是 cngivennameoousn

如下所示,运行 ldapmodify 命令行实用程序:

ldapmodify -a -h server -p 389 -D "cn=directory manager" -w password

ldapmodify 实用程序将绑定到服务器并准备向配置文件中添加条目。

接着,您需要添加两个定义浏览索引的浏览索引条目。

添加的第一个条目指定浏览索引的基础、范围和过滤器:

dn: cn="dc=siroe,dc=com",cn=Siroe1,cn=ldbm database,cn=plugins,cn=config
objectClass: top
objectClass:vlvSearch
cn:"dc=siroe,dc=com"
vlvbase:"dc=siroe,dc=com"
vlvscope:one
vlvfilter:(|(objectclass=*)(objectclass=ldapsubentry))

cn 包含浏览索引标识符,用于指定要创建浏览索引的条目。本例中为 "dc=siroe,dc=com"条目。建议将条目的 dn 用作浏览索引标识符(即 iPlanet Directory Server Console 所采用的方法),以防创建相同的浏览索引。该条目是 vlvSearch 对象类的成员。vlvbase 属性值指定创建浏览索引的条目。本例中为 "dc=siroe,dc=com" 条目(即浏览索引标识符)。vlvscope 属性为 one,指示所要加速的搜索的基础是 one。将 one 作为搜索基意味着仅搜索 cn 属性中所指定条目的直接子项,而并不搜索条目本身。vlvfilter 指定搜索使用的过滤器。本例中为 (|(objectclass=*)(objectclass=ldapsubentry))。

第二个条目为返回属性指定需要的排序顺序:

dn:cn=sort_cn_givenname_o_ou_sn,cn="dc=siroe,dc=com",cn=Siroe1,
cn=ldbm database,cn=plugins,cn=config
objectClass: top
objectClass:vlvIndex
cn:cn=sort_cn_givenname_o_ou_sn
vlvsort:cn givenname o ou sn

cn 包含浏览索引排序标识符。建议使用能为所创建的浏览索引清楚地标识出搜索排序顺序的排序标识符,例如本例中的显式排序标识符 cn=sort_cn_givenname_o_ou_sn。该条目是 vlvIndex 对象类的成员。vlvsort 属性值指定属性的排序顺序。本例中是:cngivennameoou,然后是 sn



注意 第一个浏览索引条目必须添加到 cn=instanceName,cn=ldbm database,cn=plugins,cn=config 目录树节点,第二个条目必须是第一个条目的子项。




运行 vlvindex 命令

创建完两个浏览索引条目或将附加属性类型添加到现有的索引浏览条目中后,即可运行 /usr/sbin/directoryserver vlvindex 命令以生成由 iPlanet Directory Server 维护的新浏览索引集。一旦运行该命令,对于目录中新添的数据和现有的数据而言,新索引集即处于活动状态。

要生成浏览索引,请使用以下命令:

# /usr/sbin/directoryserver vlvindex

下例使用 vlvindex 命令生成浏览索引:

# /usr/sbin/directoryserver vlvindex -n Database1 -T \
"dc=siroe,dc=com"


表 10-5    示例中所用的 vlvindex 选项说明

选项

说明

-n

 

指定数据库名称,该数据库包含要创建索引的条目。  

-t

 

指定在创建浏览索引时使用的浏览索引标识符。  



删除索引

本部分介绍如何删除特定属性的存在、等同、近似、子字符串、国际和浏览索引。

注意 由于 iPlanet Directory Server 5.1 可在单数据库或多数据库环境中运行,因此必须从每个数据库实例中删除任何不必要的索引。

删除的任何缺省索引都不会从现有数据库实例的原有索引集中被删除。



由于删除浏览索引的步骤有所不同,因此该步骤将另行说明。本部分包括以下过程:


从服务器控制台删除索引

使用 iPlanet Directory Server Console 可以删除所创建的索引、其它 iPlanet 服务器软件(例如 Messaging Server 或 Calendar Server)所用的索引及缺省索引。不能删除系统索引。

要使用 iPlanet Directory Server Console 删除索引:

  1. 在 iPlanet Directory Server Console 上,选择“配置”选项卡。

  2. 展开数据节点,然后展开与包含该索引的数据库相关联的后缀。选择要从中删除索引的数据库。

  3. 找到包含所要删除的索引的属性。清除该索引下的复选框。

    如果要删除为特定属性所维护的所有索引,则在“属性名称”下选择该属性的单元格,然后单击“删除属性”。

  4. 单击“保存”。

    此时出现删除索引警告对话框,要求确认是否要删除该索引。单击“是”以删除索引。

  5. 此时出现“删除浏览索引”对话框,显示索引删除的状态。可单击“状态日志”按钮以查看所删除索引的状态。创建完索引后,单击“关闭”以退出“删除浏览索引”对话框。


从命令行删除索引

使用 ldapdelete 命令行实用程序可以删除索引,如下所示:

  • 使用 ldapdelete 命令行实用程序从现有索引条目中删除整个索引条目或删除不必要的索引类型。

  • 使用 /usr/sbin/directoryserver db2index-task 命令,重新生成由服务器维护的其余索引。

下列部分介绍删除索引所涉及的步骤。


删除索引条目

使用 ldapdelete 命令行实用程序从现有条目中删除整个索引条目或不必要的索引类型。

如果要删除特定数据库的索引,则从 cn=index,cn=instanceName,cn=ldbm database,cn=plugins,cn=config 条目中删除索引条目,其中 cn=instanceName 对应于数据库的名称。

要删除缺省索引,则从 cn=default indexes,cn=config,cn=ldbm database,cn=plugins,cn=config 条目中删除。

例如,您可能想删除 Siroe1 数据库中 sn 属性的存在、等同和子字符串索引。

可以删除以下条目:

dn: cn=sn,cn=index,cn=Siroe1,cn=ldbm database,cn=plugins,cn=config
objectClass: top
objectClass:nsIndex
cn:sn
nsSystemIndex:false
nsIndexType:pres
nsIndexType:eq
nsIndexType:sub
nsMatchingRule:2.16.840.1.113730.3.3.2.3.1

如下所示,执行 ldapdelete

ldapdelete -h server.siroe.com -p 389 \
-D "cn=Directory Manager" -w password \
"cn=sn,cn=index,cn=Siroe1,dn=ldbm database,cn=plugins,dn=config"

删除该条目后,Siroe1 数据库即不再维护 sn 属性的存在、等同和子字符串索引。


重新生成其余索引

删除索引条目或删除索引条目的某些索引类型后,需要重新生成由 iPlanet Directory Server 维护的其余索引集。

要重新生成浏览索引,请执行“运行 db2index-task 命令”中介绍的步骤。一旦运行该命令,对于目录中新添的数据及现有的数据而言,新的索引集即处于活动状态。


从服务器控制台删除浏览索引

要使用 iPlanet Directory Server Console 删除浏览索引:

  1. 在 iPlanet Directory Server Console 中,选择“数据库”选项卡。

  2. 在导航树中选择要从中删除索引的条目(例如 People),然后从“对象”菜单中选择“删除浏览索引”。也可在导航树中选择并右键单击该条目,然后从下拉菜单中选择“删除浏览索引”。

  3. 此时出现“删除浏览索引”对话框,要求确认是否删除该索引。单击“是”以删除索引。

  4. 此时出现“删除浏览索引”对话框,显示索引删除的状态。


从命令行删除浏览索引

从命令行删除浏览索引(或称虚拟列表视图 (VLV) 索引)涉及以下两个步骤:

  • 使用 ldapmodify 删除浏览索引条目或编辑现有的浏览索引条目。

  • 运行 /usr/sbin/directoryserver vlvindex 命令,重新生成其余的索引。

下列部分介绍删除浏览索引所涉及的步骤。


删除浏览索引条目

使用 ldapdelete 命令行实用程序删除浏览索引条目或编辑现有的浏览索引条目。

如果要删除特定数据库的索引,则从 cn=index,cn=instanceName,cn=ldbm database,cn=plugins,cn=config 条目中删除浏览索引条目,其中 cn=instanceName 对应于数据库的名称。

例如,您可能想删除 Siroe1 数据库中 "dc=siroe,dc=com" 条目上用于加速 ldapsearch 操作的浏览索引,其中搜索基是 "dc=siroe,dc=com",搜索过滤器是 (|(objectclass=*)(objectclass=ldapsubentry)), 范围是 one,返回属性的排序顺序是 cngivennameoousn

要删除该浏览索引,需要删除以下两个相应的浏览索引条目:

dn: cn="dc=siroe,dc=com",cn=Siroe1,cn=ldbm database,cn=plugins,cn=config
objectClass: top
objectClass:vlvSearch
cn:"dc=siroe,dc=com"
vlvbase:"dc=siroe,dc=com
vlvscope:one
vlvfilter:(|(objectclass=*)(objectclass=ldapsubentry))

dn:cn=sort_cn_givenname_o_ou_sn,cn="dc=siroe,dc=com",cn=Siroe1,
cn=ldbm database,cn=plugins,cn=config
objectClass: top
objectClass:vlvIndex
cn:cn=sort_cn_givenname_o_ou_sn
vlvsort:cn givenname o ou sn

如下所示,执行 ldapdelete

ldapdelete -h siroe.server.com -p 389 -D "cn=Directory Manager" -w password \
"cn="dc=siroe,dc=com",cn=Siroe1,cn=ldbm database,cn=plugins,cn=config" \
"cn=sort_cn_givenname_o_ou_sn,cn="dc=siroe,dc=com",cn=Siroe1, \
cn=ldbm database,cn=plugins,cn=config"

删除这两个浏览索引条目后,则 Siroe1 数据库中所持有的 "dc=siroe,dc=com" 条目上用于加速 ldapsearch 操作的浏览索引(其中搜索基是 "dc=siroe,dc=com",搜索过滤器是 (|(objectclass=*)(objectclass=ldapsubentry)), 搜索范围是 one,返回属性的排序顺序是 cngivennameoousn)将不再由 Siroe1 数据库来维护。


重新生成其余索引

删除浏览索引条目或删除现有浏览索引条目中不必要的属性类型后,需要重新生成由 iPlanet Directory Server 维护的其余索引集。

要重新生成浏览索引,请执行“运行 db2index.pl 命令”中介绍的步骤。一旦运行该命令,对于目录中新添的数据及现有的数据而言,新的索引集即处于活动状态。



管理索引



目录所用的每一索引都由索引关键字表和匹配的条目 ID 列表组成。目录使用条目 ID 列表来建立可能与客户机应用程序的搜索请求相匹配的候选条目列表(详细信息,请参阅“关于索引”)。

对于每个条目 ID 列表,都会在 nsslapd-allidsthreshold 属性中为其指定一个大小限制。该大小限制普遍适用于由服务器管理的所有索引关键字,因而在逻辑上称为所有 ID 阈值。当单个 ID 列表大小达到该限制值时,服务器将用一个“所有 ID 令牌”来替换该条目 ID 列表。

“所有 ID 令牌”将使服务器假定所有目录项都与索引关键字匹配。事实上,所有 ID 令牌会使服务器认为无任何索引可用于该搜索类型。目录假定搜索请求的其它某些方面将使服务器在处理请求前缩小其候选列表。

下面部分分析了“所有 ID”机制的利弊。同时还给出了调整“所有 ID 阈值”的建议。


“所有 ID”机制的优点

对于搜索结果将是大多数或所有目录项的情况(例如 cn=* 搜索)而言,“所有 ID”机制可以提高搜索的性能。假定所有条目 ID 均由 iPlanet Directory Server 返回:

  • 不会无限地增加条目 ID 列表,这样会减小 iPlanet Directory Server 的可用磁盘空间。

  • 不会为响应搜索请求而无谓地将大的条目 ID 列表加载到内存中以得到所有目录项,这样可通过减少大量的磁盘读取操作来提高搜索的性能。

  • 不会要求大量的 RAM 以将不必要的大条目 ID 列表保存在内存中。


“所有 ID”机制的缺点

如果“所有 ID 阈值”对于目录大小而言设置得过低(这是最常见的问题)或过高,就可能出现性能问题。


当“所有 ID 阈值”设置得过低时

当“所有 ID 阈值”设置得过低时,将会有很多索引关键字包含“所有 ID 令牌”。这会导致过多的目录搜索过程检查目录中的每个条目。搜索性能受到很大的影响。

例如,假设您在管理通用名 (cn) 属性上的等同索引。存储在 cn 索引中的索引关键字之一是 cn=James。相应的条目 ID 列表中包含属性设置为 James 的每个条目的 ID 号。

cn 属性的等同索引易于维护,因为目录中只有很小一部分条目包括 cn=James。对于使用 cn=James 过滤器的搜索而言,性能将得到提高,因为在响应搜索请求时只需检查很小部分的条目 ID。

但是,目录可能会随时间而持续增大。这样就可能会添加越来越多的 James,但它们仍然只占总目录条目的一小部分。最后,cn=James 条目 ID 列表可能会变得相当大,但它对于搜索性能而言仍是必需的列表。如果目录变得足够大,从而导致添加的 cn=James 条目达到“所有 ID 阈值”的限制,则 cn=James 条目 ID 列表将被替换为“所有 ID 令牌”。每次搜索 cn=James 时,目录服务器都为响应搜索请求而检查目录中的各个条目。

当数据库变得非常大时,“所有 ID 阈值”将被设为所有索引关键字的较大比例,从而导致搜索性能显著降低。


当“所有 ID 阈值”设置得过高时

“所有 ID 阈值”设置得过高时同样会产生性能问题。如果“所有 ID 阈值”非常高,则不得不维护一个较大的条目 ID 列表,且该列表将在响应搜索请求时被加载到内存中。如果“所有 ID 阈值”非常高,有可能抵消“所有 ID” 机制的全部优点(详细信息,请参阅“所有 ID 机制的优点”)。


单个企业目录的“所有 ID 阈值”调整建议

更改服务器的“所有 ID 阈值”缺省值时,请务必小心。如果将阈值更改为不恰当的值,则可能会降低而非提高服务器的性能。该调整建议主要适用于 80,000 个条目以下的单个企业目录。

如果目录大小较为稳定,则将“所有 ID 阈值”设置为目录中总存储条目数的 5%。也就是说,如果目录中有 50,000 个条目,则将“所有 ID 阈值”设为 2,500。

如果近期计划在目录中添加大量的条目,则应仔细考虑“所有 ID 阈值”的值。应考虑以下情况:

  • 更改“所有 ID 阈值”意味着必须重建数据库。该操作的代价可能比较高,特别是对于包含数百万个条目的目录而言。

  • 虽然我们建议将“所有 ID 阈值”设为当前数据库大小的 5%,但即使“所有 ID 阈值”的设置低至当前数据库大小的 0.5% 或高达 50%,也不应出现严重的性能问题。但是,我们仍然建议将该值尽可能地保持在 5% 左右。

您应该根据当前的目录需要和将来的扩展计划进行权衡,以避免以后更改“所有 ID 阈值”(需要重建数据库)。

例如,假设当前数据库的大小为 50,000 个条目。但预计目录会在几年内增长到 1,000,000 个条目。如果将“所有 ID 阈值”设置为 50,000 的 5%(2,500),则当目录增长为 1,000,000 个条目时,就会出现性能问题。对于包含 1,000,000 个条目的数据库来说,2,500 太低,因为 1,000,000 个条目的数据库的下限是 1,000,000 的 0.5%,即 5,000 个条目。

如果预计目录会在将来增长到非常大,则可执行如下操作之一:

  • 将“所有 ID 阈值”设置为当前的最佳值 (2,500),同时当目录变得足够大时,可规划重建数据库以保证其仍然可靠。数据库的重建意味着在重建期间将一直关闭目录,或至少将目录置于只读模式。这也意味着将重新初始化从目录服务器接收复制条目的所有客户服务器。

  • 确定一个略大于当前需要但能很好地满足未来需要的值。例如,如果当前目录包含 50,000 个条目,则尝试将“所有 ID 阈值”设置为 20,000,即 50,000 的 40%(满足当前目录需要的范围之内)或 1,000,000 的 2%(满足未来目录需要的范围之内)。

选择何种战略取决于目录部署的需要。当“所有 ID 阈值”的值偏离 5% 这一理想设置时,请考虑重建数据库(及所有相关客户服务器)的代价与潜在性能影响之间的关系。



注意 在客户服务器上设置不同的“所有 ID 阈值”也是有一定意义的,因为这样可以调整该阈值以满足不同搜索的需要。



同时,还应考虑目录增长的速度以及增加目录大小要花费的时间。如果目录增长需要若干年的时间,则可以计划重建数据库。如果几个月内目录大小即以数量级或更快速度增长,则考虑设置“所有 ID 阈值”的方法以使重建数据库的时间间隔降到最低。


对于服务供应商和 Extranet 的“所有 ID 阈值”调整建议

对于主机服务供应商和 Extranet 的目录或超过 80,000 个条目的目录而言,若需调整建议,可以联系 iPlanet 专业服务


“所有 ID 阈值”的缺省值

默认情况下,目录服务器的“所有 ID 阈值”设为 4000。该值适用于最多 80,000 个条目的数据库。如果预计数据库大于 80,000 个条目,则建议在填充数据库前将“所有 ID 阈值”更改为较大的值。


“所有 ID 阈值”不合适的征兆

当“所有 ID 阈值”的设置不正确时,搜索性能将降低。但其它原因也可能造成搜索性能降低。例如:

  • 用户正在对未维护其索引的对象执行大量搜索操作。

  • 数据库缓存大小和条目缓存大小可能设置不正确。详细信息,请参阅“调整目录服务器性能”

在更改“所有 ID 阈值”前,应先仔细检查这些可能性。

如果您认为服务器的“所有 ID 阈值”过低,可查看访问日志。请参阅第 12 章“监控服务器和数据库活动”。任何导致返回所有条目 ID 的搜索均包含 notes=U 标记。以下搜索将返回 notes=U 标记:

  • 未为其维护索引的搜索

  • 未为其维护 ID 列表的搜索(因为已达到索引关键字的“所有 ID 阈值”)

要确定搜索结果是否属于本应创建索引的搜索,则必须使访问日志中的 RESULT 行与其上面 SRCH 行中的 connop 值相匹配。SRCH 行将显示用于搜索请求的搜索过滤器。如果指定的搜索过滤器有索引,则达到索引关键字的“所有 ID 阈值”时将返回 notes=U 标记。例如,访问日志如下所示:

[24/July/1998:15:12:20 -0800] conn=2 op=1 SRCH base="o=siroe.com" scope=0 filter="(cn=James)"

[24/July/1998:15:12:20 -0800] conn=2 op=1 RESULT err=0 tag=101 nentries=10000 notes=U

notes=U 标记的存在指示已达到 cn 属性索引的“所有 ID 阈值”。


更改“所有 ID 阈值”的值

要更改服务器的“所有 ID 阈值”:

  1. 关闭 iPlanet Directory Server。

  2. 使用命令行将所有目录数据库导入 LDIF。

    有关详细信息,请参阅第 4 章,“填充目录数据库”。

  3. 使用 ldapmodify 实用程序编辑 nsslapd-allidsthreshold 条目,或编辑以下文件:

    /var/ds5/slapd-serverID/config/dse.ldif

  4. 找到 nsslapd-allidsthreshold 属性,然后将其值更改为所希望的设置。

  5. 使用 ldif2db 初始化所有数据库。

    请参阅第 4 章,“填充目录数据库”。

  6. 重新启动 iPlanet Directory Server。

增大“所有 ID 阈值”的值后,检查数据库缓存的大小。

增大“所有 ID 阈值”会因条目 ID 列表变大而导致内存需求增大。根据所维护索引的数量和类型,内存需求增加量也会有所不同,但内存需求始终不会大于 nsslapd-allidsthreshold 属性值的增大系数。也就是说,如果 nsslapd-allidsthreshold 属性值加倍,则数据库缓存大小的增长不应超过其当前值的一倍。

最为极端的情况是数据库缓存大小的增长与“所有 ID 阈值”的增大系数持平。如果有可用的物理内存,则尝试按照 nsslapd-allidsthreshold 值增加量的 25% 来增加数据库的缓存大小。例如,如果将“所有 ID 阈值”翻倍,则将数据库缓存大小按 50% 增长。必要时,可缓慢增加缓存大小,直到服务器性能令人满意为止。

使用 nsslapd-dbcachesize 属性设置数据库缓存的大小。有关详细信息,请参阅 iPlanet Directory Server 配置、命令和文件参考指南 中的 nsslapd-dbcachesize 属性。



属性名称快速参考表



下表列出了有主要名称(或真实名称)及别名的所有属性。创建索引时,请务必使用主要名称。


表 10-6    属性主要名称及其别名

属性主要名称  

属性别名  

dn

 

distinguishedName

 

cn

 

commonName

 

sn

 

surName

 

c

 

countryName

 

l

 

localityName

 

st

 

stateOrProvinceName

 

street

 

streetAddress

 

o

 

organization

 

ou

 

organizationalUnitName

 

facsimileTelephoneNumber

 

fax

 

uid

 

userId

 

mail

 

rfc822mailbox

 

mobile

 

mobileTelephoneNumber

 

pager

 

pagerTelephoneNumber

 

co

 

friendlyCountryName

 

labeledUri

 

labeledUri

 

ttl

 

timeToLive

 

dc

 

domainComponent

 

authorCn

 

documentAuthorCommonName

 

authorSn

 

documentAuthorSurname

 

drink

 

favoriteDrink

 


上一页      目录      索引      文档主页      下一页     
版权所有 © 2001 Sun Microsystems, Inc.。部分版权所有 © 2001 Netscape Communications Corp.。保留所有权利。

最近更新时间 2002 年 2 月 15 日