그브린인터페이스는 추상화 수준이 높기 때문에 액세스 방법 구현자가 액세스되는 데이터 유형의 의미 체계만 구현하면 됩니다.브린계층 자체가 동시성을 관리하고 색인 구조를 로깅 및 검색합니다.
을 얻기 위해 필요한 모든 것브린액세스 방법 작동은 인덱스에 저장된 요약 값의 동작과 스캔 키와 상호 작용하는 방식을 정의하는 몇 가지 사용자 정의 방법을 구현하는 것입니다. 한마디로,브린combines extensibility with generality, code reuse, and a clean interface.
연산자 클래스에는 4가지 메소드가 있습니다.브린다음을 제공해야 합니다.
BrinOpcInfo *opcInfo(Oid type_oid)인덱싱된 열의 요약 데이터에 대한 내부 정보를 반환합니다. 반환 값은 palloc'd를 가리켜야 합니다.BrinOpcInfo, 다음과 같은 정의가 있습니다.
typedef 구조체 BrinOpcInfo
/* Number of columns stored in an index column of this opclass */
uint16 oi_nstored;
/* Opaque pointer for the opclass' private use */
무효 *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)두 개의 인덱스 튜플을 통합합니다. 두 개의 인덱스 튜플이 있는 경우 두 튜플을 모두 나타내도록 첫 번째 항목의 표시된 속성을 수정합니다. 두 번째 튜플은 수정되지 않습니다.
핵심 배포에는 minmax 및 inclusion이라는 두 가지 유형의 연산자 클래스에 대한 지원이 포함됩니다. 이를 사용하는 연산자 클래스 정의는 적절하게 내부 데이터 유형에 대해 제공됩니다. 사용자는 소스 코드를 작성할 필요 없이 동등한 정의를 사용하여 다른 데이터 유형에 대해 추가 연산자 클래스를 정의할 수 있습니다. 선언되는 적절한 카탈로그 항목이면 충분합니다. 연산자 전략의 의미에 대한 가정은 지원 함수의 소스 코드에 포함되어 있습니다.
위에 설명된 네 가지 주요 지원 기능의 구현이 작성되어 있다면 완전히 다른 의미를 구현하는 연산자 클래스도 가능합니다. 주요 릴리스 간의 이전 버전과의 호환성은 보장되지 않습니다. 예를 들어 이후 릴리스에서는 추가 지원 기능이 필요할 수 있습니다.
완전히 정렬된 집합을 구현하는 데이터 유형에 대한 연산자 클래스를 작성하려면 다음과 같이 해당 연산자와 함께 minmax 지원 함수를 사용할 수 있습니다.표 67.2. All operator class members (functions and operators) are mandatory.
표 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 |
| Operator Strategy 22 | 보다 큰 연산자 | 윈 토토 전략 1 |
| 윈 토토 전략 23 | 보다 크거나 같음 연산자 | 윈 토토 전략 1 |
지원 함수 번호 1-10은 BRIN 내부 함수용으로 예약되어 있으므로 SQL 수준 함수는 번호 11부터 시작합니다. 지원 함수 번호 11은 인덱스를 구축하는 데 필요한 주요 함수입니다. 연산자 클래스와 동일한 데이터 유형을 가진 두 개의 인수를 허용하고 이들의 합집합을 반환해야 합니다. 포함 연산자 클래스는로 정의된 경우 다양한 데이터 유형의 공용체 값을 저장할 수 있습니다.저장매개변수. 통합 함수의 반환 값은 다음과 일치해야 합니다.저장데이터 유형.
지원 함수 번호 12 및 14는 내장 데이터 유형의 불규칙성을 지원하기 위해 제공됩니다. 기능 번호 12는 병합할 수 없는 다른 계열의 네트워크 주소를 지원하는 데 사용됩니다. 함수 번호 14는 빈 범위를 지원하는 데 사용됩니다. 함수 번호 13은 선택 사항이지만 권장되는 값으로, 통합 함수에 전달되기 전에 새 값을 확인할 수 있습니다. BRIN 프레임워크는 통합이 변경되지 않은 경우 일부 작업을 단축할 수 있으므로 이 기능을 사용하면 색인 성능이 향상될 수 있습니다.
minmax 및 포함 연산자 클래스는 모두 교차 데이터 유형 연산자를 지원하지만 이러한 연산자를 사용하면 종속성이 더욱 복잡해집니다. The minmax operator class requires a full set of operators to be defined with both arguments having the same data type. It allows additional data types to be supported by defining extra sets of operators. Inclusion operator class operator strategies are dependent on another operator strategy as shown in표 67.3, 또는 자신과 동일한 연산자 전략. 종속성 연산자를로 정의해야 합니다.저장데이터 유형을 왼쪽 인수로 사용하고 다른 지원되는 데이터 유형을 지원되는 연산자의 오른쪽 인수로 사용합니다. 참조float4_minmax_ops최소최대의 예로서, 그리고box_inclusion_ops포함의 예입니다.