토토 캔 9.2.24 문서 | ||||
---|---|---|---|---|
윈 토토 PostgreSQL : 문서 : 9.2 : Extensibility | up | 54 장. SP-Gist 인덱스 | 메이저 토토 사이트 : 문서 : 9.2 : 예제 |
이 섹션에서는 구현 세부 사항 및 기타 트릭을 다룹니다 구현 자에게 유용합니다SP-Gist알아볼 운영자 클래스.
개별 잎 튜플과 내부 튜플은 단일에 맞아야합니다. 색인 페이지 (기본적으로 8KB). 따라서 인덱싱 값의 경우 가변 길이 데이터 유형, 긴 값 만 지원할 수 있습니다 접미사 나무와 같은 방법으로 각 레벨 트리에는 페이지에 맞을 정도로 짧은 접두사가 포함되어 있습니다. 그리고 최종 잎 레벨에는 접미사가 포함되어 있습니다. 페이지에 맞습니다. 운영자 클래스가 설정해야LongValuesok준비된 경우에만 참으로 이 일이 일어나도록 준비합니다. 그렇지 않으면SP-GistCore는 요청을 거부합니다 색인 페이지에 너무 큰 값을 색인하십시오.
마찬가지로, 그것은 운영자 클래스의 책임입니다 내부 튜플은 색인 페이지에 맞지 않기에는 너무 커지지 않습니다. 이것은 하나에서 사용할 수있는 자식 노드의 수를 제한합니다. 내부 튜플 및 접두사 값의 최대 크기.
또 다른 한계는 내부 튜플의 노드가 가리키는 경우입니다.
잎 튜플 세트에 그 튜플은 모두 동일해야합니다.
인덱스 페이지. (이것은 추구를 줄이기위한 설계 결정입니다
그러한 튜플을 함께 묶는 링크에 공간을 절약하십시오.)
잎 튜플 세트는 페이지가 너무 커지고 스플릿은
수행되고 중간 내부 튜플이 삽입됩니다. 이것을 위해
문제를 해결하려면 새로운 내부 튜플필수잎 세트를 나눕니다
둘 이상의 노드 그룹으로의 값. 운영자 클래스의 경우picksplit
함수는 실패합니다
그게SP-Gist코어
에 설명 된 특별한 조치에 대한 의지섹션
54.3.3.
일부 트리 알고리즘은 각 내부에 고정 된 노드 세트를 사용합니다.
튜플; 예를 들어, 쿼드 트리에는 항상 정확히 있습니다
내부 주위의 4 개의 사분면에 해당하는 4 개의 노드
튜플의 중심점. 이 경우 코드는 일반적으로 작동합니다
숫자별로 노드를 사용하면 명시 적이 필요하지 않습니다.
노드 라벨. 노드 레이블을 억제하고 일부는 저장합니다
우주),picksplit
함수
에 대해 NULL을 반환 할 수 있습니다Nodelabels배열. 결과적으로Nodelabels후속 동안 널
전화선택
andInner_consistent
. 원칙적으로 노드 레이블
내부 튜플에 사용될 수 있고 다른 사람들에게는 생략 할 수 있습니다.
동일한 지수.
표지되지 않은 노드를 가진 내부 튜플로 작업 할 때, 그것은
에 대한 오류입니다.선택
반환하려면SPGADDNODE, 노드 세트가 있기 때문에
그러한 경우에 고정되어야합니다. 또한 조항이 없습니다
표지되지 않은 노드를 생성하려면spgsplittuple행동SPGADDNODE행동이 필요합니다
잘.
theSP-Gist코어 캔
운영자 클래스의 결과를 대체picksplit
picksplit
제공된 잎을 나누지 못합니다
값은 두 가지 이상의 노드 범주로 값입니다. 이런 일이 발생하면
새로운 내부 튜플은 각각의 여러 노드로 생성됩니다.
동일한 레이블 (있는 경우)이 있습니다.picksplit
사용했던 하나의 노드에 제공
그리고 잎 값은 이들 중에서 무작위로 나뉩니다.
동등한 노드. 그만큼Allthesame플래그
내부 튜플에 설정되어 경고선택
andInner_consistent
튜플 기능
그렇지 않으면 노드 세트가 없습니다.
예상하다.
대처할 때Allthesame튜플, A선택
결과SPGMATCHNODE는 의미로 해석됩니다
새 값을 등가에 할당 할 수 있습니다.
노드; 핵심 코드는 제공된 것을 무시합니다Noden가치와 그 중 하나로 내려갑니다
무작위로 노드 (나무의 균형을 유지하기 위해). 그것은
오류선택
반환Spgaddnode노드는 모두 동일하지 않습니다. 그만큼SPGSPLITTUPLE값이라면 조치를 사용해야합니다
삽입하려면 기존 노드와 일치하지 않습니다.
대처할 때Allthesame튜플,Inner_consistent
함수는 노드의 전부 또는 전혀 반환해야합니다.
색인 검색을 계속하기위한 대상은 모두
동등한. 특별한 코드가 필요하거나 필요하지 않을 수도 있습니다.
얼마나에 따라Inner_consistent
함수는 일반적으로 가정합니다
노드의 의미에 대해.