이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

54.3. 구현

이 섹션에서는 구현 세부 사항 및 기타 트릭을 다룹니다 구현 자에게 유용합니다SP-Gist알아볼 운영자 클래스.

54.3.1. SP-Gist 한계

개별 잎 튜플과 내부 튜플은 단일에 맞아야합니다. 색인 페이지 (기본적으로 8KB). 따라서 인덱싱 값의 경우 가변 길이 데이터 유형, 긴 값 만 지원할 수 있습니다 접미사 나무와 같은 방법으로 각 레벨 트리에는 페이지에 맞을 정도로 짧은 접두사가 포함되어 있습니다. 그리고 최종 잎 레벨에는 접미사가 포함되어 있습니다. 페이지에 맞습니다. 운영자 클래스가 설정해야LongValuesok준비된 경우에만 참으로 이 일이 일어나도록 준비합니다. 그렇지 않으면SP-GistCore는 요청을 거부합니다 색인 페이지에 너무 큰 값을 색인하십시오.

마찬가지로, 그것은 운영자 클래스의 책임입니다 내부 튜플은 색인 페이지에 맞지 않기에는 너무 커지지 않습니다. 이것은 하나에서 사용할 수있는 자식 노드의 수를 제한합니다. 내부 튜플 및 접두사 값의 최대 크기.

또 다른 한계는 내부 튜플의 노드가 가리키는 경우입니다. 잎 튜플 세트에 그 튜플은 모두 동일해야합니다. 인덱스 페이지. (이것은 추구를 줄이기위한 설계 결정입니다 그러한 튜플을 함께 묶는 링크에 공간을 절약하십시오.) 잎 튜플 세트는 페이지가 너무 커지고 스플릿은 수행되고 중간 내부 튜플이 삽입됩니다. 이것을 위해 문제를 해결하려면 새로운 내부 튜플필수잎 세트를 나눕니다 둘 이상의 노드 그룹으로의 값. 운영자 클래스의 경우picksplit함수는 실패합니다 그게SP-Gist코어 에 설명 된 특별한 조치에 대한 의지섹션 54.3.3.

54.3.2. 노드가없는 sp-gist 라벨

일부 트리 알고리즘은 각 내부에 고정 된 노드 세트를 사용합니다. 튜플; 예를 들어, 쿼드 트리에는 항상 정확히 있습니다 내부 주위의 4 개의 사분면에 해당하는 4 개의 노드 튜플의 중심점. 이 경우 코드는 일반적으로 작동합니다 숫자별로 노드를 사용하면 명시 적이 필요하지 않습니다. 노드 라벨. 노드 레이블을 억제하고 일부는 저장합니다 우주),picksplit함수 에 대해 NULL을 반환 할 수 있습니다Nodelabels배열. 결과적으로Nodelabels후속 동안 널 전화선택andInner_consistent. 원칙적으로 노드 레이블 내부 튜플에 사용될 수 있고 다른 사람들에게는 생략 할 수 있습니다. 동일한 지수.

표지되지 않은 노드를 가진 내부 튜플로 작업 할 때, 그것은 에 대한 오류입니다.선택반환하려면SPGADDNODE, 노드 세트가 있기 때문에 그러한 경우에 고정되어야합니다. 또한 조항이 없습니다 표지되지 않은 노드를 생성하려면spgsplittuple행동SPGADDNODE행동이 필요합니다 잘.

54.3.3. "All-the-Same"내부 튜플

theSP-Gist코어 캔 운영자 클래스의 결과를 대체picksplitpicksplit제공된 잎을 나누지 못합니다 값은 두 가지 이상의 노드 범주로 값입니다. 이런 일이 발생하면 새로운 내부 튜플은 각각의 여러 노드로 생성됩니다. 동일한 레이블 (있는 경우)이 있습니다.picksplit사용했던 하나의 노드에 제공 그리고 잎 값은 이들 중에서 무작위로 나뉩니다. 동등한 노드. 그만큼Allthesame​​플래그 내부 튜플에 설정되어 경고선택andInner_consistent튜플 기능 그렇지 않으면 노드 세트가 없습니다. 예상하다.

대처할 때Allthesame튜플, A선택결과SPGMATCHNODE는 의미로 해석됩니다 새 값을 등가에 할당 할 수 있습니다. 노드; 핵심 코드는 제공된 것을 무시합니다Noden가치와 그 중 하나로 내려갑니다 무작위로 노드 (나무의 균형을 유지하기 위해). 그것은 오류선택반환Spgaddnode노드는 모두 동일하지 않습니다. 그만큼SPGSPLITTUPLE값이라면 조치를 사용해야합니다 삽입하려면 기존 노드와 일치하지 않습니다.

대처할 때Allthesame튜플,Inner_consistent함수는 노드의 전부 또는 전혀 반환해야합니다. 색인 검색을 계속하기위한 대상은 모두 동등한. 특별한 코드가 필요하거나 필요하지 않을 수도 있습니다. 얼마나에 따라Inner_consistent함수는 일반적으로 가정합니다 노드의 의미에 대해.