第 4 章 提高搜索性能(及平衡读取性能)
为目录改进搜索操作的最有效方法是,为条目配置全面的索引,以及对搜索结果的合理限制。
4.1. 使用索引
索引(如它表示)是一个标签,显示特定条目包含特定属性,而不必包含与条目相关的任何其他详情(这样可节省空间并更快返回搜索结果)。每个索引都围绕 Directory Server 属性进行组织,并以某种方式与该属性匹配:
- 存在索引(已弃用) 只是显示哪个条目包含属性。
- 等性索引(eq) 显示与特定搜索字符串匹配的属性值。
- 大约索引(approx) 用于高效的声音搜索,显示具有可手机与字符串匹配的值的条目。
- 子字符串 索引(sub) 将属性值的任何子字符串与给定的搜索字符串匹配。(如果服务器维护非常昂贵,此索引就会非常昂贵。)
- 国际索引 使用匹配规则来匹配目录中的字符串,其中包含英语以外的语言值。
注意
Red Hat Directory Server Administration Guide 中的 管理索引 章节中包括了更详细的信息。
但是,只创建索引不会直接提高服务器性能。维护索引通过针对服务器维护的每个索引验证更改中的每个属性,从而在每次修改、添加和删除操作方面都造成负担:
- 目录服务器收到一项添加或修改操作。
- 目录服务器检查索引属性,以确定是否为属性值维护索引。
- 如果创建的属性值被索引,则 Directory 服务器会生成新的索引条目。
- 服务器完成后,会根据客户端请求创建实际属性值。
例如,Directory 服务器添加该条目:
dn: cn=John Doe, ou=People,dc=example,dc=com objectclass: top objectClass: person objectClass: orgperson objectClass: inetorgperson cn: John Doe cn: John sn: Doe ou: Manufacturing ou: people telephoneNumber: 408 555 8834 description: Manufacturing lead for the Z238 line of widgets.
Directory 服务器正在维护以下索引:
cn
(通用名称)和sn
(surname)属性的等同性、大约和子字符串索引。- 平板和子字符串索引,用于电话编号属性。
- description 属性的子字符串索引。
当在目录中添加该条目时,Directory 服务器必须执行以下步骤:
- 为 John 和 John Doe 创建
cn
相等索引条目。 - 为 John 和 John Doe 创建适当的
cn
大约索引条目。 - 为 John 和 John Doe 创建适当的
cn
子字符串索引条目。 - 为 Doe 创建
sn
相等索引条目。 - 为 Doe 创建适当的
sn
大约索引条目。 - 为 Doe 创建适当的
sn
子字符串索引条目。 - 为 408 555 8834 创建电话号码相等的索引条目。
- 为 408 555 8834 创建适当的电话号码子字符串索引条目。
- 为 Manufacturing 创建适当的描述子字符串索引条目,导致小部件的 Z238 行。为字符串生成大量子字符串条目。
在创建新索引前,请确定平衡索引的开销与搜索性能的潜在改进。特别重要的是,请将您维护的索引类型与目录中存储的信息类型以及用户通常搜索的信息类型匹配。
- 对于通常包含数字(如电话号码)的属性而言,大约索引效率不高。
- 子字符串索引无法用于二进制属性。
- 如果值较大(例如旨在包含摄影或含有加密数据的密码的属性),则应避免使用相等的索引。
- 在搜索中,维护不使用的属性的索引会增加开销,而不会提高全局搜索性能。
- 没有索引的属性仍可在搜索请求中指定,但根据搜索类型,搜索性能可能会有很大降级。
- 您维护的索引越大,所需的磁盘空间就越高。
注意
创建索引对于具有高搜索操作负载和低修改操作负载的目录更有效。