인덱스 관리
인덱스를 최적화하여 검색 성능 개선
초록
Red Hat Directory Server에 대한 피드백 제공 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat의 문서 및 제품에 대한 의견을 제공해 주셔서 감사합니다. Red Hat이 어떻게 이를 개선할 수 있는지 알려 주십시오. 이렇게 하려면 다음을 수행합니다.
Jira (계정 필요)를 통해 Red Hat Directory Server 설명서에 피드백을 제출하려면 다음을 수행합니다.
- Red Hat 문제 추적기 로 이동하십시오.
- 요약 필드에 설명 제목을 입력합니다.
- 설명 필드에 개선을 위한 제안을 입력합니다. 문서의 관련 부분에 대한 링크를 포함합니다.
- 대화 상자 하단에서 생성 을 클릭합니다.
Jira를 통해 Red Hat Directory Server 제품에 대한 피드백을 제출하기 위해 필요한 경우:
- Red Hat 문제 추적기 로 이동하십시오.
- 문제 생성 페이지에서 클릭합니다.
- Summary 필드를 입력합니다.
- Component 필드에서 구성 요소를 선택합니다.
다음을 포함하여 Description 필드를 작성합니다.
- 선택한 구성 요소의 버전 번호입니다.
- 문제 또는 개선을 위한 제안을 재현하는 단계입니다.
- 생성을 클릭합니다.
1장. 새로 생성된 모든 데이터베이스에 적용되는 기본 인덱스 정의 링크 복사링크가 클립보드에 복사되었습니다!
Directory Server의 기본 인덱스는 인덱싱할 특성 집합을 정의합니다. 새 데이터베이스를 만들 때 Directory Server는 기본 인덱스 특성을 cn=default 인덱스,cn=config,cn=plugins,cn=plugins,cn=plugins,cn=config 항목에서 데이터베이스 특정 cn=index, cn=index,cn=name,cn=plugins,cn=plugins,cn=config 항목에 복사합니다.
Directory Server는 기본 인덱스의 변경 사항을 기존 데이터베이스에 적용하지 않습니다.
1.1. 다양한 인덱스 유형 링크 복사링크가 클립보드에 복사되었습니다!
Directory Server는 인스턴스의 데이터베이스 디렉터리에 있는 별도의 데이터베이스 파일에 인덱싱된 각 특성의 인덱스를 저장합니다. 예를 들어 sn 속성의 인덱스는 /var/lib/dirsrv/slapd-instance_name/db/name/sn.db 파일에 저장됩니다. 각 인덱스 파일은 Directory Server가 특성에 대해 서로 다른 인덱스를 유지 관리하는 경우 여러 인덱스 유형을 포함할 수 있습니다.
Directory Server는 다음과 같은 인덱스 유형을 지원합니다.
-
표시 인덱스(
pres)는 특정 특성을 포함하는 항목 목록입니다. 예를 들어 클라이언트가속성=mail과 같이 검색을 자주 수행할 때 이 유형을 사용합니다. -
같음 인덱스(
eq)는 특정 특성 값을 포함하는 항목을 검색합니다. 예를 들어cn특성의 같음 인덱스를 사용하면cn=first_name last_name을 더 빠르게 검색할 수 있습니다. -
대략적인 인덱스(
Approx)를 사용하면 대략적인 또는 난증과 같은 검색을 효율적으로 수행할 수 있습니다. 예를 들어,cn~=first_name last_name,cn~=first_name,cn~=first_nam을 검색하면cn=first_name X last_name을 반환합니다. Directory Server의 meta phone phonetic 알고리즘은 US-ASCII 문자만 지원합니다. 따라서 대략적인 인덱싱을 영어 값과 함께 사용해야 합니다. -
하위 문자열 인덱스(
sub)는 유지 관리할 수 있는 비용이 많이 드는 인덱스이지만 항목 내의 하위 문자열에 대해 효율적으로 검색할 수 있습니다. 하위 문자열 인덱스는 각 항목에 대해 최소 3자로 제한됩니다. 예를 들어, phoneNumber=*555*를 검색하면 디렉토리의 모든 항목이 phoneNumber속성에555를 포함하는 값을 반환합니다. - 국제 인덱스를 사용하면 검색 속도를 높일 수 있으므로 국제 디렉터리에서 정보를 확인할 수 있습니다. 국제 인덱스를 생성하는 프로세스는 인덱스할 특성과 OID(Object identifier)를 연결하여 일치하는 규칙을 적용하는 것을 제외하고 일반 인덱스를 생성하는 프로세스와 유사합니다.
1.2. 인덱싱의 이점 밸런싱 링크 복사링크가 클립보드에 복사되었습니다!
새 인덱스를 만들기 전에 인덱스를 유지 관리하는 이점과 비용의 균형을 유지합니다.Before you create new indexes, balance the benefits of maintaining indexes against the costs:
- 대략적인 인덱스는 전화 번호와 같이 숫자를 일반적으로 포함하는 속성에는 효율적이지 않습니다.
- 바이너리 특성에는 하위 문자열 인덱스가 작동하지 않습니다.
- 이미지와 같이 큰 값이 포함된 특성에 대한 같음 인덱스를 방지할 수 있습니다.
- 검색에 일반적으로 사용되지 않는 속성의 인덱스를 유지 관리하면 검색 성능을 향상시키지 않고 오버헤드가 증가합니다.
- 검색 유형에 따라 검색 성능이 크게 저하될 수 있지만 인덱싱되지 않은 속성은 검색 요청에 계속 사용될 수 있습니다.
인덱스에는 시간이 많이 걸릴 수 있습니다. 예를 들어 Directory Server에서 추가 작업을 수신하면 서버는 인덱싱 특성을 검사하여 특성 값에 대해 인덱스가 유지 관리되는지 확인합니다. 생성된 특성 값이 인덱싱되면 Directory Server에서 새 특성 값을 인덱스에 추가한 다음 실제 특성 값이 해당 항목에 생성됩니다.
예 1.1. 사용자가 항목을 추가할 때 Directory Server가 수행하는 인덱싱 단계
Directory Server에서 다음과 같은 인덱스를 유지 관리하는 것으로 가정합니다.
-
cn및sn속성에 대한 같음, 대략적, 하위 문자열 인덱스입니다. -
phone
Number속성에 대한 같음 및 하위 문자열 인덱스입니다. -
description속성에 대한 하위 문자열 인덱스입니다.
예를 들어 사용자는 다음 항목을 추가합니다.
사용자가 항목을 추가하면 Directory Server는 다음 단계를 수행합니다.
-
존과에 대한존Doecnequality 인덱스 항목을 만듭니다. -
존과에 대한존Doecn대략 인덱스 항목을 만듭니다. -
존과에 대한존Doecn하위 문자열 인덱스 항목을 만듭니다. -
Doe에 대한snequality 인덱스 항목을 만듭니다. -
Doe에 대한sn대략 인덱스 항목을 만듭니다. -
Doe에 대한sn하위 문자열 인덱스 항목을 만듭니다. -
408 555 8834에 대한 phoneNumber같음 인덱스 항목을 만듭니다. -
408 555 8834에 대한 phoneNumber하위 문자열 인덱스 항목을 만듭니다. -
Manufacturing lead에 대한descriptionsubstring index 항목을 생성합니다.
이 예제에서는 대규모 디렉터리에 대한 데이터베이스를 만들고 유지 관리하는 데 필요한 작업 수가 리소스 집약적일 수 있음을 보여줍니다.
Directory Server 성능에 영향을 줄 수 있으므로 멤버십 속성(예: 멤버 ,unique )에 대한 하위 문자열 인덱스를 정의하지 마십시오. 멤버를 추가하거나 제거할 때,member uniquemember 가 많은 멤버가 있는 그룹에 uniquemember를 추가 또는 제거할 때 uniquemember 하위 문자열 인덱스의 계산에는 추가 또는 제거된 값뿐만 아니라 모든 uniquemember 값을 평가해야 합니다.
1.3. 기본 인덱스 속성 링크 복사링크가 클립보드에 복사되었습니다!
디렉터리 서버는 기본 인덱스 속성을 cn=default 인덱스,cn=config,cn=ldbm 데이터베이스,cn=plugins,cn=config 항목에 저장합니다. 인덱스 유형을 포함하여 이를 표시하려면 다음을 입력합니다.
ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -b "cn=default indexes,cn=config,cn=ldbm database,cn=plugins,cn=config" -s one -o ldif-wrap=no
# ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -b "cn=default indexes,cn=config,cn=ldbm database,cn=plugins,cn=config" -s one -o ldif-wrap=no
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
데이터베이스 인덱스에서 테이블(시스템 인덱스)에 나열된 특성을 제거하면 Directory Server 성능에 큰 영향을 미칠 수 있습니다.
1.4. 기본 인덱스 유지 관리 링크 복사링크가 클립보드에 복사되었습니다!
디렉터리 서버는 기본 인덱스 속성을 cn=default 인덱스,cn=config,cn=ldbm 데이터베이스,cn=plugins,cn=config 항목에 저장합니다. LDIF 문을 사용하여 기본 인덱스 특성만 유지 관리할 수 있습니다.
절차
예를 들어 index 유형이
eq및sub인인 기본 인덱스에roomNumber특성을 추가하려면 다음을 입력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow LDIF 설명:
-
Objectclass: nsIndex: 이 항목이 인덱스 항목임을 정의합니다. -
Objectclass: top: 이 오브젝트 클래스는 인덱스 항목에서 추가로 필요합니다. -
CN: 특성의 이름을 index로 설정합니다. -
nsSystemIndex: 인덱스가 Directory Server 작업에 필요한지 여부를 나타냅니다. -
nsIndexType: 이 다중 값 속성은 인덱스 유형을 지정합니다.
-
예를 들어,
roomNumber속성의 기본 인덱스 속성에pres인덱스 유형을 추가하려면 다음을 입력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어,
roomNumber속성의 기본 인덱스 속성에서pres인덱스 유형을 제거하려면 다음을 입력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어 기본 인덱스에서
roomNumber속성을 제거하려면 다음을 입력합니다.ldapdelete -D "cn=Directory Manager" -W -H ldap://server.example.com -x cn=roomNumber,cn=default indexes,cn=config,cn=ldbm database,cn=plugins,cn=config
# ldapdelete -D "cn=Directory Manager" -W -H ldap://server.example.com -x cn=roomNumber,cn=default indexes,cn=config,cn=ldbm database,cn=plugins,cn=configCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
기본 인덱스 특성을 나열하여 변경 사항을 확인합니다.
ldapsearch -H ldap://server.example.com:389 -D "cn=Directory Manager" -W -b "cn=default indexes,cn=config,cn=ldbm database,cn=plugins,cn=config" -x -s one -o ldif-wrap=no
# ldapsearch -H ldap://server.example.com:389 -D "cn=Directory Manager" -W -b "cn=default indexes,cn=config,cn=ldbm database,cn=plugins,cn=config" -x -s one -o ldif-wrap=noCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2장. 특정 데이터베이스의 인덱스 유지 관리 링크 복사링크가 클립보드에 복사되었습니다!
Directory Server의 각 데이터베이스에는 자체 인덱스가 있습니다. dsconf 유틸리티 또는 웹 콘솔을 사용하여 인덱스를 생성, 업데이트 및 삭제할 수 있습니다.
2.1. 다양한 인덱스 유형 링크 복사링크가 클립보드에 복사되었습니다!
Directory Server는 인스턴스의 데이터베이스 디렉터리에 있는 별도의 데이터베이스 파일에 인덱싱된 각 특성의 인덱스를 저장합니다. 예를 들어 sn 속성의 인덱스는 /var/lib/dirsrv/slapd-instance_name/db/name/sn.db 파일에 저장됩니다. 각 인덱스 파일은 Directory Server가 특성에 대해 서로 다른 인덱스를 유지 관리하는 경우 여러 인덱스 유형을 포함할 수 있습니다.
Directory Server는 다음과 같은 인덱스 유형을 지원합니다.
-
표시 인덱스(
pres)는 특정 특성을 포함하는 항목 목록입니다. 예를 들어 클라이언트가속성=mail과 같이 검색을 자주 수행할 때 이 유형을 사용합니다. -
같음 인덱스(
eq)는 특정 특성 값을 포함하는 항목을 검색합니다. 예를 들어cn특성의 같음 인덱스를 사용하면cn=first_name last_name을 더 빠르게 검색할 수 있습니다. -
대략적인 인덱스(
Approx)를 사용하면 대략적인 또는 난증과 같은 검색을 효율적으로 수행할 수 있습니다. 예를 들어,cn~=first_name last_name,cn~=first_name,cn~=first_nam을 검색하면cn=first_name X last_name을 반환합니다. Directory Server의 meta phone phonetic 알고리즘은 US-ASCII 문자만 지원합니다. 따라서 대략적인 인덱싱을 영어 값과 함께 사용해야 합니다. -
하위 문자열 인덱스(
sub)는 유지 관리할 수 있는 비용이 많이 드는 인덱스이지만 항목 내의 하위 문자열에 대해 효율적으로 검색할 수 있습니다. 하위 문자열 인덱스는 각 항목에 대해 최소 3자로 제한됩니다. 예를 들어, phoneNumber=*555*를 검색하면 디렉토리의 모든 항목이 phoneNumber속성에555를 포함하는 값을 반환합니다. - 국제 인덱스를 사용하면 검색 속도를 높일 수 있으므로 국제 디렉터리에서 정보를 확인할 수 있습니다. 국제 인덱스를 생성하는 프로세스는 인덱스할 특성과 OID(Object identifier)를 연결하여 일치하는 규칙을 적용하는 것을 제외하고 일반 인덱스를 생성하는 프로세스와 유사합니다.
2.2. 인덱싱의 이점 밸런싱 링크 복사링크가 클립보드에 복사되었습니다!
새 인덱스를 만들기 전에 인덱스를 유지 관리하는 이점과 비용의 균형을 유지합니다.Before you create new indexes, balance the benefits of maintaining indexes against the costs:
- 대략적인 인덱스는 전화 번호와 같이 숫자를 일반적으로 포함하는 속성에는 효율적이지 않습니다.
- 바이너리 특성에는 하위 문자열 인덱스가 작동하지 않습니다.
- 이미지와 같이 큰 값이 포함된 특성에 대한 같음 인덱스를 방지할 수 있습니다.
- 검색에 일반적으로 사용되지 않는 속성의 인덱스를 유지 관리하면 검색 성능을 향상시키지 않고 오버헤드가 증가합니다.
- 검색 유형에 따라 검색 성능이 크게 저하될 수 있지만 인덱싱되지 않은 속성은 검색 요청에 계속 사용될 수 있습니다.
인덱스에는 시간이 많이 걸릴 수 있습니다. 예를 들어 Directory Server에서 추가 작업을 수신하면 서버는 인덱싱 특성을 검사하여 특성 값에 대해 인덱스가 유지 관리되는지 확인합니다. 생성된 특성 값이 인덱싱되면 Directory Server에서 새 특성 값을 인덱스에 추가한 다음 실제 특성 값이 해당 항목에 생성됩니다.
예 2.1. 사용자가 항목을 추가할 때 Directory Server가 수행하는 인덱싱 단계
Directory Server에서 다음과 같은 인덱스를 유지 관리하는 것으로 가정합니다.
-
cn및sn속성에 대한 같음, 대략적, 하위 문자열 인덱스입니다. -
phone
Number속성에 대한 같음 및 하위 문자열 인덱스입니다. -
description속성에 대한 하위 문자열 인덱스입니다.
예를 들어 사용자는 다음 항목을 추가합니다.
사용자가 항목을 추가하면 Directory Server는 다음 단계를 수행합니다.
-
존과에 대한존Doecnequality 인덱스 항목을 만듭니다. -
존과에 대한존Doecn대략 인덱스 항목을 만듭니다. -
존과에 대한존Doecn하위 문자열 인덱스 항목을 만듭니다. -
Doe에 대한snequality 인덱스 항목을 만듭니다. -
Doe에 대한sn대략 인덱스 항목을 만듭니다. -
Doe에 대한sn하위 문자열 인덱스 항목을 만듭니다. -
408 555 8834에 대한 phoneNumber같음 인덱스 항목을 만듭니다. -
408 555 8834에 대한 phoneNumber하위 문자열 인덱스 항목을 만듭니다. -
Manufacturing lead에 대한descriptionsubstring index 항목을 생성합니다.
이 예제에서는 대규모 디렉터리에 대한 데이터베이스를 만들고 유지 관리하는 데 필요한 작업 수가 리소스 집약적일 수 있음을 보여줍니다.
Directory Server 성능에 영향을 줄 수 있으므로 멤버십 속성(예: 멤버 ,unique )에 대한 하위 문자열 인덱스를 정의하지 마십시오. 멤버를 추가하거나 제거할 때,member uniquemember 가 많은 멤버가 있는 그룹에 uniquemember를 추가 또는 제거할 때 uniquemember 하위 문자열 인덱스의 계산에는 추가 또는 제거된 값뿐만 아니라 모든 uniquemember 값을 평가해야 합니다.
2.3. 기본 인덱스 속성 링크 복사링크가 클립보드에 복사되었습니다!
디렉터리 서버는 기본 인덱스 속성을 cn=default 인덱스,cn=config,cn=ldbm 데이터베이스,cn=plugins,cn=config 항목에 저장합니다. 인덱스 유형을 포함하여 이를 표시하려면 다음을 입력합니다.
ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -b "cn=default indexes,cn=config,cn=ldbm database,cn=plugins,cn=config" -s one -o ldif-wrap=no
# ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -b "cn=default indexes,cn=config,cn=ldbm database,cn=plugins,cn=config" -s one -o ldif-wrap=no
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
데이터베이스 인덱스에서 테이블(시스템 인덱스)에 나열된 특성을 제거하면 Directory Server 성능에 큰 영향을 미칠 수 있습니다.
2.4. 명령줄을 사용하여 특정 데이터베이스의 인덱스 유지 관리 링크 복사링크가 클립보드에 복사되었습니다!
dsconf 유틸리티를 사용하여 명령줄을 사용하여 인덱스 설정을 유지 관리할 수 있습니다.
절차
예를 들어, index type
eq및sub를 사용하여userRoot데이터베이스의 인덱스에roomNumber특성을 추가하려면 다음을 입력합니다.dsconf -D "cn=Directory Manager" ldap://server.example.com backend index add --attr roomNumber --index-type eq --index-type sub --reindex userRoot
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend index add --attr roomNumber --index-type eq --index-type sub --reindex userRootCopy to Clipboard Copied! Toggle word wrap Toggle overflow --reindex옵션을 사용하면 Directory Server가 데이터베이스를 자동으로 다시 인덱싱합니다.예를 들어
userRoot데이터베이스의roomNumber속성의 인덱스 설정에pres인덱스 유형을 추가하려면 다음을 입력합니다.dsconf -D "cn=Directory Manager" ldap://server.example.com backend index set --attr roomNumber --add-type pres userRoot
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend index set --attr roomNumber --add-type pres userRootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어
userRoot데이터베이스의roomNumber속성의 인덱스 설정에서pres인덱스 유형을 제거하려면 다음을 입력합니다.dsconf -D "cn=Directory Manager" ldap://server.example.com backend index set --attr roomNumber --del-type pres userRoot
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend index set --attr roomNumber --del-type pres userRootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어
userRoot데이터베이스의 인덱스에서roomNumber특성을 제거하려면 다음을 입력합니다.dsconf -D "cn=Directory Manager" ldap://server.example.com backend index delete --attr roomNumber userRoot
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend index delete --attr roomNumber userRootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
userRoot데이터베이스의 인덱스 설정을 나열합니다.dsconf -D "cn=Directory Manager" ldap://server.example.com backend index list userRoot
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend index list userRootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5. 인스턴스가 오프라인인 동안 인덱스 다시 생성 링크 복사링크가 클립보드에 복사되었습니다!
인스턴스가 오프라인 상태인 동안 dsctl db2index 유틸리티를 사용하여 전체 데이터베이스를 다시 인덱싱할 수 있습니다.
사전 요구 사항
-
인덱싱 항목을 생성하거나 기존
userRoot데이터베이스에 추가 인덱스 유형을 추가했습니다.
절차
인스턴스를 종료합니다.
dsctl instance_name stop
# dsctl instance_name stopCopy to Clipboard Copied! Toggle word wrap Toggle overflow 인덱스를 다시 생성합니다.
데이터베이스의 모든 인덱스에 대해 다음을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 특정 특성 인덱스의 경우 다음을 실행합니다.
dsctl instance_name db2index userRoot --attr aci cn givenname
# dsctl instance_name db2index userRoot --attr aci cn givennameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령은
aci,cn,givenname특성에 대한 인덱스를 다시 생성합니다.데이터베이스가 지정되지 않은 경우 명령은 모든 속성에 대한 인덱스를 다시 생성합니다.
dsctl(offline) 명령에 대한 자세한 내용은 다음을 실행합니다.dsctl instance_name db2index --help
# dsctl instance_name db2index --helpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
인스턴스를 시작합니다.
dsctl instance_name start
# dsctl instance_name startCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
userRoot데이터베이스의 인덱스 설정을 나열합니다.dsconf -D "cn=Directory Manager" ldap://server.example.com backend index list userRoot
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend index list userRootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.6. 웹 콘솔을 사용하여 특정 데이터베이스의 인덱스 유지 관리 링크 복사링크가 클립보드에 복사되었습니다!
웹 콘솔을 사용하여 Directory Server에서 인덱스 설정을 유지 관리할 수 있습니다.
사전 요구 사항
- 웹 콘솔에서 인스턴스에 로그인되어 있습니다.
절차
→ → → → 로 이동합니다.
인덱스에 속성을 추가하려면 다음을 수행합니다.
- 클릭합니다.
-
속성
선택 필드에 속성이름을 입력합니다. - 인덱스 유형을 선택합니다.
-
생성 후 인덱스 특성을선택합니다. - 클릭합니다.
특성의 인덱스 설정을 업데이트하려면 다음을 수행합니다.
-
속성 옆에 있는 오버플로 메뉴를 클릭하고
인덱스 편집을 선택합니다. - 필요에 따라 인덱스 설정을 업데이트합니다.
-
생성 후 인덱스 특성을선택합니다. - 를 클릭합니다.
-
속성 옆에 있는 오버플로 메뉴를 클릭하고
인덱스에서 특성을 삭제하려면 다음을 수행합니다.
-
속성 옆에 있는 오버플로 메뉴를 클릭하고
인덱스 삭제를 선택합니다. -
Yes, I am sure를 선택하고 를 클릭합니다. -
메뉴에서
Reindex Suffix를 선택합니다.
-
속성 옆에 있는 오버플로 메뉴를 클릭하고
검증
- → → → → 로 이동하여 인덱스 설정에 변경 사항이 반영되는지 확인합니다.
3장. 하위 문자열 인덱스의 검색 키 길이 변경 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 하위 문자열 인덱스의 검색 키 길이는 3자 이상이어야 합니다.By default, the length of the search key for substring indexes must be at least three characters. 예를 들어 Directory Server는 abc 문자열을 인덱스에 검색 키로 추가하지만 ab* 는 그렇지 않습니다. 그러나 특히 와일드카드 문자를 사용하는 검색의 경우 검색 성능을 개선하기 위해 검색 키 길이를 단축할 수 있습니다. 이렇게 하면 인덱스의 검색 키 수가 증가합니다.
Directory Server에는 검색 키에 필요한 최소 문자 수를 변경하는 세 가지 속성이 있습니다.
-
nsSubStrBegin: 와일드카드 문자 앞에 검색 키의 시작 부분에 대한 최소 문자 수를 설정합니다. 예를 들면 다음과 같습니다.
abc*
abc*
-
nsSubStrMiddle: 와일드카드 문자 간에 검색 키의 최소 문자 수를 설정합니다. 예를 들면 다음과 같습니다.
*abc*
*abc*
-
nsSubStrEnd: 와일드카드 문자 뒤에 검색 키 끝에 대한 문자 수를 설정합니다. 예를 들면 다음과 같습니다.
*xyz
*xyz
3.1. 명령줄을 사용하여 하위 문자열 인덱스의 검색 키 길이 변경 링크 복사링크가 클립보드에 복사되었습니다!
특성 인덱스에 새 검색 키 길이를 설정하여 검색 속도를 개선할 수 있습니다.
절차
새 검색 키 길이를 설정하려면
ExtensibleObject오브젝트 클래스를 추가한 다음nsSubStrBegin,nsSubStrEnd,nsSubStrMiddle속성을 항목에 추가합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인덱스를 다시 생성하여 새 설정을 적용합니다. 예를 들어 Directory Server 인스턴스가 실행 중인 동안 다음 명령을 사용하여 지정된 특성에 대한 인덱스를 다시 생성합니다.
dsconf <instance_name> backend index reindex --attr <attribute_name> <database_name>
# dsconf <instance_name> backend index reindex --attr <attribute_name> <database_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
-
검색 키 길이를 변경할 속성을 선택합니다(예:
cn). cn인덱스를 덤프합니다.Berkeley Database(BDB)가 있는 인스턴스에서 다음을 실행합니다.
dbscan -D bdb -f /var/lib/dirsrv/slapd-<instance_name>/db/database/cn.db > /tmp/default_len
# dbscan -D bdb -f /var/lib/dirsrv/slapd-<instance_name>/db/database/cn.db > /tmp/default_lenCopy to Clipboard Copied! Toggle word wrap Toggle overflow Lightning Memory-Mapped Database(LMDB)가 있는 인스턴스에서 다음을 실행합니다.
dbscan -D mdb -f /var/lib/dirsrv/slapd-<instance_name>/db/database/cn.db > /tmp/default_len
# dbscan -D mdb -f /var/lib/dirsrv/slapd-<instance_name>/db/database/cn.db > /tmp/default_lenCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 섹션에 설명된 대로 새 검색 키 길이 를 구성합니다. 명령 줄을 사용하여 하위 문자열 인덱스의 검색 키 길이 변경
인스턴스를 중지하여 디스크의 데이터베이스를 동기화합니다.
dsctl <instance_name> stop
# dsctl <instance_name> stopCopy to Clipboard Copied! Toggle word wrap Toggle overflow cn인덱스를 덤프합니다.Berkeley Database(BDB)가 있는 인스턴스에서 다음을 실행합니다.
dbscan -D bdb -f /var/lib/dirsrv/slapd-<instance_name>/db/database/cn.db > /tmp/len_2
# dbscan -D bdb -f /var/lib/dirsrv/slapd-<instance_name>/db/database/cn.db > /tmp/len_2Copy to Clipboard Copied! Toggle word wrap Toggle overflow Lightning Memory-Mapped Database(LMDB)가 있는 인스턴스에서 다음을 실행합니다.
dbscan -D mdb -f /var/lib/dirsrv/slapd-<instance_name>/db/database/cn.db > /tmp/len_2
# dbscan -D mdb -f /var/lib/dirsrv/slapd-<instance_name>/db/database/cn.db > /tmp/len_2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
len_2및default_len파일을 비교합니다.diff /tmp/len_2 /tmp/default_len
# diff /tmp/len_2 /tmp/default_lenCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4장. 가상 목록 보기 제어를 사용하여 대규모 검색 결과의 연속 하위 집합 요청 링크 복사링크가 클립보드에 복사되었습니다!
Directory Server는 LDAP 가상 목록 보기 제어를 지원합니다. 이 제어를 사용하면 LDAP 클라이언트에서 대규모 검색 결과의 연속 하위 집합을 요청할 수 있습니다.
예를 들어, Directory Server에 100.000개의 항목이 있는 주소록을 저장했습니다. 기본적으로 모든 항목의 쿼리는 모든 항목을 한 번에 반환합니다. 이는 리소스 및 시간이 많이 소요되는 작업이며 클라이언트는 사용자가 결과를 스크롤하면 부분 집합만 표시되므로 전체 데이터 집합이 필요하지 않은 경우가 많습니다.
그러나 클라이언트가 VLV 컨트롤을 사용하는 경우 서버는 하위 집합만 반환하고 예를 들어 클라이언트 애플리케이션에서 사용자가 스크롤하는 경우 서버는 더 많은 항목을 반환합니다. 이렇게 하면 서버의 부하가 줄어들고 클라이언트가 모든 데이터를 한 번에 저장하고 처리할 필요가 없습니다.
VLV는 또한 모든 검색 매개변수가 수정될 때 서버 정렬된 검색의 성능을 향상시킵니다. Directory Server는 VLV 인덱스 내에서 검색 결과를 미리 계산합니다. 따라서 VLV 인덱스는 결과를 검색하고 나중에 정렬하는 것보다 훨씬 효율적입니다.
Directory Server에서 VLV 컨트롤은 항상 사용할 수 있습니다. 그러나 대형 디렉터리인 VLV 인덱스에서 이를 사용하는 경우 찾아보기 인덱스라고도 하는 VLV 인덱스의 속도를 크게 향상시킬 수 있습니다.
Directory Server는 표준 인덱스와 같은 특성에 대해 VLV 인덱스를 유지 관리하지 않습니다. 서버는 항목에 설정된 속성과 디렉터리 트리에 있는 항목의 위치에 따라 VLV 인덱스를 동적으로 생성합니다. 표준 항목과 달리 VLV 항목은 데이터베이스의 특수 항목입니다.
4.1. ldapsearch 명령에서 VLV 제어 작동 방식 링크 복사링크가 클립보드에 복사되었습니다!
일반적으로 LDAP 클라이언트 애플리케이션에서 VLV(가상 목록 보기) 기능을 사용합니다. 그러나 예를 들어 테스트를 위해 ldapsearch 유틸리티를 사용하여 부분적인 결과만 요청할 수 있습니다.
ldapsearch 명령에서 VLV 기능을 사용하려면 ss (서버 측 정렬) 및 vlv 검색 확장 모두에 -E 옵션을 지정합니다.
ldapsearch ... -E 'sss=attribute_list' -E 'vlv=query_options'
# ldapsearch ... -E 'sss=attribute_list' -E 'vlv=query_options'
sss 검색 확장에는 다음 구문이 있습니다.
[!]sss=[-]<attr[:OID]>[/[-]<attr[:OID]>...]
[!]sss=[-]<attr[:OID]>[/[-]<attr[:OID]>...]
vlv 검색 확장 프로그램에는 다음 구문이 있습니다.
[!]vlv=<before>/<after>(/<offset>/<count>|:<value>)
[!]vlv=<before>/<after>(/<offset>/<count>|:<value>)
-
먼저 대상 항목 앞에 반환된 항목 수를 설정합니다.
-
그런 다음 대상 항목 뒤에 반환되는 항목 수를 설정합니다.
-
Index,count,valuehelp to determine the target entry.값을설정하는 경우 대상 항목은 값으로 시작하는 첫 번째 정렬 특성을 갖는 첫 번째 항목입니다. 그렇지 않으면count를0으로 설정하고 대상 항목은인덱스값(부터 시작)에 따라 결정됩니다.카운트값이0보다 크면 대상 항목은 비율인덱스 * 항목 수 /수에 따라 결정됩니다.
예 4.1. VLV 검색 확장자를 사용한 ldapsearch 명령의 출력
다음 명령은 ou=People,dc=example,dc=com 에서 검색합니다. 그런 다음 서버는 cn 속성으로 결과를 정렬하고 오프셋 이후의 한 항목 및 두 개의 항목이 함께 70 번째 항목의 uid 속성을 반환합니다.
4.2. 인증되지 않은 사용자가 VLV 제어를 사용하도록 활성화 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 oid=2.16.840.1.113730.3.9,cn=features,cn=config 항목의 ACI(액세스 제어 명령)를 사용하면 인증된 사용자만 VLV 제어를 사용할 수 있습니다. 인증되지 않은 사용자도 VLV 제어를 사용하도록 활성화하려면 userdn = "ldap:///all" 을 userdn = "ldap:///anyone"로 변경하여 ACI를 업데이트합니다.
절차
oid=2.16.840.1.113730.3.9,cn=features,cn=config에서 ACI를 업데이트합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
VLV 컨트롤로 쿼리를 수행해도 바인딩 사용자는 지정할 수 없습니다.
ldapsearch -H ldap://server.example.com -b "ou=People,dc=example,dc=com" -s one -x -E 'sss=cn' -E 'vlv=1/2/70/0' uid
# ldapsearch -H ldap://server.example.com -b "ou=People,dc=example,dc=com" -s one -x -E 'sss=cn' -E 'vlv=1/2/70/0' uidCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령을 사용하려면 서버가 익명의 바인딩을 허용해야 합니다.
명령이 성공하지만 항목을 반환하지 않는 경우 bind 사용자로 쿼리를 다시 실행하여 인증을 사용할 때 쿼리가 작동하는지 확인합니다.
4.3. 명령줄을 사용하여 VLV 쿼리의 속도를 개선하기 위해 VLV 인덱스 생성 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에 따라 mail 속성이 포함되어 objectClass 속성을 포함하는 ou=People,dc=example,dc=com 의 항목에 대해 검색 인덱스라고도 하는 가상 목록 보기(VLV) 인덱스를 생성합니다.
사전 요구 사항
- 클라이언트 애플리케이션에서 VLV 제어를 사용합니다.
- 클라이언트 애플리케이션은 대규모 검색 결과의 연속 하위 집합을 쿼리해야 합니다.
- 디렉터리에는 많은 수의 항목이 포함되어 있습니다.
절차
VLV 검색 항목을 생성합니다.
dsconf -D "cn=Directory Manager" ldap://server.example.com backend vlv-index add-search --name "VLV People" --search-base "ou=People,dc=example,dc=com" --search-filter "(&(objectClass=person)(mail=*))" --search-scope 2 userRoot
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend vlv-index add-search --name "VLV People" --search-base "ou=People,dc=example,dc=com" --search-filter "(&(objectClass=person)(mail=*))" --search-scope 2 userRootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 다음 옵션을 사용합니다.
-
--name은 검색 항목의 이름을 설정합니다. 이것은 어떤 이름일 수 있습니다. -
--search-base는 VLV 인덱스의 기본 DN을 설정합니다. Directory Server는 이 항목에 VLV 인덱스를 생성합니다. -
--search-scope는 VLV 인덱스에서 항목을 실행하도록 검색 범위를 설정합니다. 이 옵션을0(기본 검색),1(한 수준 검색) 또는2(subtree 검색)로 설정할 수 있습니다. -
--search-filter는 VLV 인덱스를 생성할 때 필터 Directory Server가 적용됩니다. 이 필터와 일치하는 항목만 인덱스의 일부가 됩니다. -
userRoot는 항목을 생성할 데이터베이스의 이름입니다.
-
인덱스 항목을 생성합니다.
dsconf -D "cn=Directory Manager" ldap://server.example.com backend vlv-index add-index --index-name "VLV People - cn sn" --parent-name "VLV People" --sort "cn sn" --index-it userRoot
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend vlv-index add-index --index-name "VLV People - cn sn" --parent-name "VLV People" --sort "cn sn" --index-it userRootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 다음 옵션을 사용합니다.
-
--index-name은 인덱스 항목의 이름을 설정합니다. 이것은 어떤 이름일 수 있습니다. -
--parent-name은 VLV 검색 항목의 이름을 설정하고 이전 단계에서 설정한 이름과 일치해야 합니다. -
--sort는 특성 이름과 정렬 순서를 설정합니다. 특성을 공백으로 구분합니다. -
--index-it로 인해 항목이 생성된 후 Directory Server가 인덱스 작업을 자동으로 시작합니다. -
userRoot는 항목을 생성할 데이터베이스의 이름입니다.
-
검증
/var/log/dirsrv/slapd-instance_name/errors파일에서 VLV 인덱스가 성공적으로 생성되었는지 확인합니다.[26/Nov/2021:11:32:59.001988040 +0100] - INFO - bdb_db2index - userroot: Indexing VLV: VLV People - cn sn [26/Nov/2021:11:32:59.507092414 +0100] - INFO - bdb_db2index - userroot: Indexed 1000 entries (2%). ... [26/Nov/2021:11:33:21.450916820 +0100] - INFO - bdb_db2index - userroot: Indexed 40000 entries (98%). [26/Nov/2021:11:33:21.671564324 +0100] - INFO - bdb_db2index - userroot: Finished indexing.
[26/Nov/2021:11:32:59.001988040 +0100] - INFO - bdb_db2index - userroot: Indexing VLV: VLV People - cn sn [26/Nov/2021:11:32:59.507092414 +0100] - INFO - bdb_db2index - userroot: Indexed 1000 entries (2%). ... [26/Nov/2021:11:33:21.450916820 +0100] - INFO - bdb_db2index - userroot: Indexed 40000 entries (98%). [26/Nov/2021:11:33:21.671564324 +0100] - INFO - bdb_db2index - userroot: Finished indexing.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ldapsearch명령에서 VLV 제어를 사용하여 디렉터리에서 특정 레코드만 쿼리합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서는
ou=People,dc=example,dc=example,dc=com의 적어도이라는 항목이 있다고 가정합니다.uid=user072에 지속적으로uid=user001
4.4. VLV 쿼리의 속도를 개선하기 위해 웹 콘솔을 사용하여 VLV 인덱스 생성 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에 따라 mail 속성이 포함되어 objectClass 속성을 포함하는 ou=People,dc=example,dc=com 의 항목에 대해 검색 인덱스라고도 하는 가상 목록 보기(VLV) 인덱스를 생성합니다.
사전 요구 사항
- 웹 콘솔에서 인스턴스에 로그인되어 있습니다.
- 클라이언트 애플리케이션에서 VLV 제어를 사용합니다.
- 클라이언트 애플리케이션은 대규모 검색 결과의 연속 하위 집합을 쿼리해야 합니다.
- 디렉터리에는 많은 수의 항목이 포함되어 있습니다.
절차
- → → → 로 이동합니다.
클릭하고 필드를 작성합니다.
-
VLV Index Name: 검색 항목의 이름입니다. 이것은 어떤 이름일 수 있습니다. -
검색 기반: VLV 인덱스의 기본 DN입니다. Directory Server는 이 항목에 VLV 인덱스를 생성합니다. -
Search Filter: 필터 디렉터리 서버는 VLV 인덱스를 생성할 때 적용됩니다. 이 필터와 일치하는 항목만 인덱스의 일부가 됩니다. -
검색 범위: VLV 인덱스에서 항목을 실행할 검색 범위입니다.
-
- 를 클릭합니다.
- 클릭합니다.
속성 이름을 입력하고
저장 후 다시 인덱스를 선택합니다.- 클릭합니다.
검증
→ → 로 이동하여 VLV 인덱스가 성공적으로 생성되었는지 확인합니다.
[26/Nov/2021:11:32:59.001988040 +0100] - INFO - bdb_db2index - userroot: Indexing VLV: VLV People - cn sn [26/Nov/2021:11:32:59.507092414 +0100] - INFO - bdb_db2index - userroot: Indexed 1000 entries (2%). ... [26/Nov/2021:11:33:21.450916820 +0100] - INFO - bdb_db2index - userroot: Indexed 40000 entries (98%). [26/Nov/2021:11:33:21.671564324 +0100] - INFO - bdb_db2index - userroot: Finished indexing.
[26/Nov/2021:11:32:59.001988040 +0100] - INFO - bdb_db2index - userroot: Indexing VLV: VLV People - cn sn [26/Nov/2021:11:32:59.507092414 +0100] - INFO - bdb_db2index - userroot: Indexed 1000 entries (2%). ... [26/Nov/2021:11:33:21.450916820 +0100] - INFO - bdb_db2index - userroot: Indexed 40000 entries (98%). [26/Nov/2021:11:33:21.671564324 +0100] - INFO - bdb_db2index - userroot: Finished indexing.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ldapsearch명령에서 VLV 제어를 사용하여 디렉터리에서 특정 레코드만 쿼리합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서는
ou=People,dc=example,dc=example,dc=com의 적어도이라는 항목이 있다고 가정합니다.uid=user072에 지속적으로uid=user001