그브린인터페이스는 추상화 수준이 높기 때문에 액세스 방법 구현자가 액세스되는 데이터 유형의 의미만 구현하면 됩니다. 그만큼브린계층 자체가 동시성을 관리하고 색인 구조를 로깅 및 검색합니다.
을 얻기 위해 필요한 모든 것브린액세스 방법 작동은 인덱스에 저장된 요약 값의 동작과 스캔 키와 상호 작용하는 방식을 정의하는 몇 가지 사용자 정의 방법을 구현하는 것입니다. 한마디로,브린확장성과 일반성, 코드 재사용 및 깔끔한 인터페이스를 결합합니다.
연산자 클래스에는 네 가지 메소드가 있습니다.브린다음을 제공해야 합니다.
BrinOpcInfo *opcInfo(Oid type_oid)인덱싱된 열의 요약 데이터에 대한 내부 정보를 반환합니다. 반환 값은 palloc'd를 가리켜야 합니다.BrinOpcInfo, 다음과 같은 정의가 있습니다.
typedef 구조체 BrinOpcInfo
/* 이 opclass의 인덱스 열에 저장된 열 수 */
uint16 oi_nstored;
/* opclass의 개인적인 사용을 위한 불투명 포인터 */
무효 *oi_opaque;
/* 저장된 열의 캐시 항목을 입력하세요 */
TypeCacheEntry *oi_typcache[FLEXIBLE_ARRAY_MEMBER];
BrinOpcInfo;
BrinOpcInfo.oi_opaque인덱스 스캔 중에 지원 기능 간에 정보를 전달하기 위해 연산자 클래스 루틴에서 사용할 수 있습니다.
부울 일관성(BrinDesc *bdesc, BrinValues *열, ScanKey 키)ScanKey가 범위에 대해 주어진 색인 값과 일치하는지 여부를 반환합니다. 사용할 속성 번호는 스캔 키의 일부로 전달됩니다.
bool addValue(BrinDesc *bdesc, BrinValues *column, Datum newval, bool isnull)인덱스 튜플과 인덱스 값이 주어지면 튜플의 표시된 속성을 수정하여 추가로 새 값을 나타냅니다. 튜플이 수정된 경우,참반환되었습니다.
bool UnionTuples(BrinDesc *bdesc, BrinValues *a, BrinValues *b)두 개의 인덱스 튜플을 통합합니다. 두 개의 인덱스 튜플이 있는 경우 두 튜플을 모두 나타내도록 첫 번째 항목의 표시된 속성을 수정합니다. 두 번째 튜플은 수정되지 않습니다.
다음에 대한 연산자 클래스브린선택적으로 다음 방법을 지정할 수 있습니다.
void 옵션(local_relopts *relopts)연산자 클래스 동작을 제어하는 사용자에게 표시되는 매개변수 세트를 정의합니다.
그옵션함수는 a에 대한 포인터를 전달받습니다.local_reloptsstruct, 연산자 클래스별 옵션 세트로 채워져야 합니다. 옵션은를 사용하여 다른 지원 기능에서 액세스할 수 있습니다.PG_HAS_OPCLASS_OPTIONS()그리고PG_GET_OPCLASS_OPTIONS()매크로.
인덱싱된 값의 키 추출과 키 표현이 모두 포함되어 있으므로브린유연하며 사용자가 지정한 매개변수에 따라 달라질 수 있습니다.
핵심 배포에는 minmax 및 inclusion이라는 두 가지 유형의 연산자 클래스에 대한 지원이 포함됩니다. 이를 사용하는 연산자 클래스 정의는 적절하게 내부 데이터 유형에 대해 제공됩니다. 사용자는 소스 코드를 작성할 필요 없이 동등한 정의를 사용하여 다른 데이터 유형에 대해 추가 연산자 클래스를 정의할 수 있습니다. 선언되는 적절한 카탈로그 항목이면 충분합니다. 연산자 전략의 의미에 대한 가정은 지원 함수의 소스 코드에 포함되어 있습니다.
완전히 다른 의미를 구현하는 연산자 클래스도 가능합니다. 단, 위에 설명된 네 가지 주요 지원 기능의 구현이 작성되어 있어야 합니다. 주요 릴리스 간의 이전 버전과의 호환성은 보장되지 않습니다. 예를 들어 이후 릴리스에서는 추가 지원 기능이 필요할 수 있습니다.
완전히 정렬된 집합을 구현하는 데이터 유형에 대한 연산자 클래스를 작성하려면 다음과 같이 해당 연산자와 함께 minmax 지원 함수를 사용할 수 있습니다.표 67.2. 모든 연산자 클래스 멤버(함수 및 연산자)는 필수입니다.
표 67.2. Minmax 연산자 클래스의 기능 및 지원 번호
| 연산자 클래스 멤버 | 객체 |
|---|---|
| 지원 기능 1 | 내부 함수brin_minmax_opcinfo() |
| 지원 기능 2 | 내부 함수brin_minmax_add_value() |
| 지원 기능 3 | 내부 함수brin_minmax_conpersist() |
| 지원 기능 4 | 내부 함수brin_minmax_union() |
| 젠 토토 전략 1 | 연산자보다 작음 |
| 젠 토토 전략 2 | 작거나 같음 연산자 |
| 젠 토토 전략 3 | 연산자와 같음 |
| 젠 토토 전략 4 | 보다 크거나 같음 연산자 |
| 젠 토토 전략 5 | 보다 큼 연산자 |
다른 유형 내에 값이 포함된 복잡한 데이터 유형에 대한 연산자 클래스를 작성하려면 다음과 같이 해당 연산자와 함께 포함 지원 함수를 사용할 수 있습니다.표 67.3. 어떤 언어로든 작성할 수 있는 단 하나의 추가 기능만 필요합니다. 추가 기능을 위해 더 많은 기능을 정의할 수 있습니다. 모든 연산자는 선택 사항입니다. 표에 종속 항목으로 표시된 것처럼 일부 연산자에는 다른 연산자가 필요합니다.
표 67.3. 포함 연산자 클래스의 기능 및 지원 번호
| 연산자 클래스 멤버 | 객체 | 종속성 |
|---|---|---|
| 지원 기능 1 | 내부 함수brin_inclusion_opcinfo() |
|
| 지원 기능 2 | 내부 함수brin_inclusion_add_value() |
|
| 지원 기능 3 | 내부 함수brin_inclusion_contention() |
|
| 지원 기능 4 | 내부 함수brin_inclusion_union() |
|
| 지원 기능 11 | 두 요소를 병합하는 함수 | |
| 지원 기능 12 | 두 요소가 병합 가능한지 확인하는 선택적 함수 | |
| 지원 기능 13 | 요소가 다른 요소 내에 포함되어 있는지 확인하는 선택적 함수 | |
| 지원 기능 14 | 요소가 비어 있는지 확인하는 선택적 함수 | |
| 젠 토토 전략 1 | 연산자 왼쪽 | 젠 토토 전략 4 |
| 젠 토토 전략 2 | 연산자는 오른쪽으로 확장하지 않습니다. | 젠 토토 전략 5 |
| 젠 토토 전략 3 | 연산자가 겹침 | |
| 젠 토토 전략 4 | 연산자는 왼쪽으로 확장하지 않습니다. | 젠 토토 전략 1 |
| 젠 토토 전략 5 | 연산자 오른쪽 | 젠 토토 전략 2 |
| 젠 토토 전략 6, 18 | 동일 또는 동일 연산자 | 젠 토토 전략 7 |
| 젠 토토 전략 7, 13, 16, 24, 25 | 연산자 포함 또는 같음 | |
| 젠 토토 전략 8, 14, 26, 27 | 연산자 is-contained-by-or-equal-to | 젠 토토 전략 3 |
| 젠 토토 전략 9 | 연산자는 위에서 확장하지 않습니다 | 젠 토토 전략 11 |
| 젠 토토 전략 10 | 연산자는 아래입니다 | 젠 토토 전략 12 |
| 젠 토토 전략 11 | 연산자는 위입니다 | 젠 토토 전략 9 |
| 젠 토토 전략 12 | 연산자는 아래로 확장되지 않습니다 | 젠 토토 전략 10 |
| 젠 토토 전략 20 | 연산자보다 작음 | 젠 토토 전략 5 |
| 젠 토토 전략 21 | 작거나 같음 연산자 | 젠 토토 전략 5 |
| 젠 토토 전략 22 | 보다 큰 연산자 | 젠 토토 전략 1 |
| 젠 토토 전략 23 | 보다 크거나 같음 연산자 | 젠 토토 전략 1 |
지원 함수 번호 1부터 10까지는 BRIN 내부 함수용으로 예약되어 있으므로 SQL 수준 함수는 번호 11부터 시작합니다. 지원 함수 번호 11은 인덱스를 구축하는 데 필요한 주요 함수입니다. 연산자 클래스와 동일한 데이터 유형을 가진 두 개의 인수를 허용하고 이들의 합집합을 반환해야 합니다. 포함 연산자 클래스는로 정의된 경우 다양한 데이터 유형의 공용체 값을 저장할 수 있습니다.저장매개변수. 통합 함수의 반환 값은 다음과 일치해야 합니다.저장데이터 유형.
지원 함수 번호 12와 14는 내장 데이터 유형의 불규칙성을 지원하기 위해 제공됩니다. 기능 번호 12는 병합할 수 없는 다른 계열의 네트워크 주소를 지원하는 데 사용됩니다. 함수 번호 14는 빈 범위를 지원하는 데 사용됩니다. 함수 번호 13은 선택 사항이지만 권장되는 값으로, 통합 함수에 전달되기 전에 새 값을 확인할 수 있습니다. BRIN 프레임워크는 통합이 변경되지 않은 경우 일부 작업을 단축할 수 있으므로 이 기능을 사용하면 색인 성능이 향상될 수 있습니다.
minmax 및 포함 연산자 클래스는 모두 교차 데이터 유형 연산자를 지원하지만 이러한 연산자를 사용하면 종속성이 더욱 복잡해집니다. minmax 연산자 클래스에는 동일한 데이터 유형을 갖는 두 인수를 사용하여 정의할 전체 연산자 세트가 필요합니다. 추가 연산자 세트를 정의하여 추가 데이터 유형을 지원할 수 있습니다. 포함 연산자 클래스 연산자 전략은 다음과 같이 다른 연산자 전략에 종속됩니다.표 67.3, 또는 자신과 동일한 연산자 전략. 종속성 연산자를로 정의해야 합니다.저장데이터 유형을 왼쪽 인수로 사용하고 지원되는 다른 데이터 유형을 지원되는 연산자의 오른쪽 인수로 사용합니다. 보다float4_minmax_ops최소최대의 예로서, 그리고box_inclusion_ops포함의 예입니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.