| PostgreSQL 9.2.24 문서 | ||||
|---|---|---|---|---|
| 윈 토토 PostgreSQL : 문서 : 9.2 : Extensibility | 위로 | 54장. SP-GiST 지수 | 메이저 토토 사이트 : 문서 : 9.2 : 예제 | |
이 섹션에서는 구현 세부사항 및 기타 요령을 다룹니다. 이는 구현자에게 유용합니다.SP-GiST알아두어야 할 연산자 클래스.
개별 리프 튜플과 내부 튜플은 단일에 맞아야 합니다. 인덱스 페이지(기본적으로 8KB) 따라서 값을 인덱싱할 때 가변 길이 데이터 유형, 긴 값만 지원 가능 접미사 트리와 같은 방법으로 각 수준의 트리에는 페이지에 들어갈 만큼 짧은 접두사가 포함되어 있습니다. 마지막 리프 레벨에는 다음과 같이 충분히 짧은 접미사가 포함됩니다. 한 페이지에 맞습니다. 연산자 클래스는 설정해야 합니다.longValuesOK준비된 경우에만 TRUE로 설정 이런 일이 일어나도록 준비합니다. 그렇지 않으면,SP-GiST코어는 다음 요청을 거부합니다. 색인 페이지에 맞지 않을 정도로 큰 값을 색인화합니다.
마찬가지로, 다음은 운영자 클래스의 책임입니다. 내부 튜플은 인덱스 페이지에 맞을 정도로 너무 커지지 않습니다. 이는 하나의 노드에서 사용할 수 있는 하위 노드의 수를 제한합니다. 내부 튜플 및 접두사 값의 최대 크기.
또 다른 제한은 내부 튜플의 토토 캔가 포인트를 가리킬 때입니다.
리프 튜플 집합에 대해 해당 튜플은 모두 동일해야 합니다.
인덱스 페이지. (이것은 탐색과 탐색을 줄이기 위한 설계 결정입니다.
그러한 튜플을 함께 연결하는 링크의 공간을 절약하십시오.)
리프 튜플 세트가 페이지에 비해 너무 커지면 분할이 발생합니다.
수행되고 중간 내부 튜플이 삽입됩니다. 이를 위해
문제를 해결하기 위해 새로운 내부 튜플반드시나뭇잎 세트를 나눕니다
값을 둘 이상의 토토 캔 그룹으로 나눕니다. 연산자 클래스의 경우picksplit함수가 수행하지 못함
그, 그SP-GiST코어
에 설명된 특별 조치를 취합니다.섹션
54.3.3.
일부 트리 알고리즘은 각 내부 토토 캔에 대해 고정된 토토 캔 세트를 사용합니다.
튜플; 예를 들어, 쿼드트리에는 항상 정확히
내부 주위의 4개 사분면에 해당하는 4개 토토 캔
튜플의 중심점. 이러한 경우 코드는 일반적으로 작동합니다.
숫자로 토토 캔를 지정하므로 명시적인 작업이 필요하지 않습니다.
토토 캔 레이블. 토토 캔 레이블을 억제하여 일부를 저장하려면
공백),picksplit함수
에 대해 NULL을 반환할 수 있습니다.토토 캔 라벨배열. 결과적으로 다음과 같은 결과가 발생합니다.토토 캔 라벨다음 중 NULL임
전화를 걸다선택그리고내부_일관성. 원칙적으로 토토 캔 라벨
일부 내부 튜플에는 사용될 수 있고 다른 튜플에는 생략될 수 있습니다.
같은 색인입니다.
레이블이 지정되지 않은 토토 캔가 있는 내부 튜플로 작업할 때,
오류입니다.선택돌아오다spgAddNode, 노드 세트는 다음과 같습니다.
그러한 경우에는 수정되어야 합니다. 또한, 규정도 없다.
레이블이 없는 노드를 생성하기 위해spgSplitTuple작업, 다음이 예상되므로
anspgAddNode조치가 필요합니다.
음.
그SP-GiST코어 캔
연산자 클래스의 결과를 재정의합니다.picksplit언제 함수picksplit제공된 리프를 나누는 데 실패했습니다.
값을 두 개 이상의 노드 범주로 나눕니다. 이런 일이 발생하면,
새로운 내부 튜플은 각각이 여러 노드로 생성됩니다.
동일한 라벨(있는 경우)이 있어야 합니다.picksplit사용했던 노드 하나에 주었고,
리프 값은 이들 중에서 무작위로 나뉩니다.
동등한 노드.allTheSame플래그
경고하기 위해 내부 튜플에 설정됩니다.선택그리고내부_일관성튜플이 수행하는 기능
그렇지 않을 수도 있는 토토 캔 세트가 없습니다.
기대합니다.
다음을 처리할 때allTheSame튜플, a선택결과spgMatchNode는 다음을 의미하는 것으로 해석됩니다.
새로운 값이 동등한 항목에 할당될 수 있음
노드; 핵심 코드는 제공된 코드를 무시합니다토토 캔N값을 설정하고 다음 중 하나로 내려갑니다.
노드를 무작위로 생성합니다(트리의 균형을 유지하기 위해). 그것은
오류가 발생했습니다.선택돌아오다spgAddNode, 그렇게 하면
토토 캔가 모두 동일하지는 않습니다.spgSplitTuple값이 다음과 같은 경우 작업을 사용해야 합니다.
삽입하려는 노드가 기존 노드와 일치하지 않습니다.
다음을 처리할 때allTheSame튜플, 그내부_일관성함수는 다음과 같이 노드 전체를 반환하거나 전혀 반환하지 않아야 합니다.
인덱스 검색을 계속하기 위한 대상은 모두
동등하다. 특별한 경우의 코드가 필요할 수도 있고 필요하지 않을 수도 있습니다.
얼마나 되는지에 따라내부_일관성함수는 일반적으로 다음과 같이 가정합니다.
노드의 의미에 대해.