이 모듈은 데이터 유형을 구현합니다배트맨 토토
다차원 배트맨 토토를 나타내는 것.
표 F.2에 대한 유효한 외부 표현을 보여줍니다배트맨 토토
타입.x
, y
등. 부동 소수점 번호를 나타냅니다.
표 F.2. 배트맨 토토 외부 표현
외부 구문 | 의미 |
---|---|
|
1 차원 지점 (또는 제로 길이의 1 차원 간격) |
( |
위와 동일 |
|
내 차원 공간의 점, 내부적으로 제로 볼륨 배트맨 토토로 표현 |
( |
위와 동일 |
( |
1에서 시작하는 1 차원 간격x 및 끝에서y 또는 그 반대도; 주문은 중요하지 않습니다 |
[( |
위와 동일 |
( |
대각선 반대쪽 모서리 쌍으로 표현 된 N- 차원 배트맨 토토 |
[( |
위와 동일 |
배트맨 토토의 반대쪽 모서리를 입력하는 것은 중요하지 않습니다.배트맨 토토
함수는 균일을 생성하는 데 필요한 경우 값을 자동으로 교체합니다“왼쪽 하단 - 오른쪽 상단”내부 표현. 모서리가 일치 할 때배트맨 토토
한쪽 코너와 함께.“is point”공간 낭비를 피하기위한 깃발.
입력시 공백이 무시되므로[(
|x
), (y
)][(
.x
), (y
)]
값은 내부적으로 64 비트 플로팅 포인트 번호로 저장됩니다. 이것은 약 16 개의 중요한 숫자가있는 숫자가 잘릴 것임을 의미합니다.
표 F.3유형에 제공된 연산자 표시배트맨 토토
.
표 F.3. 배트맨 토토 연산자
운영자 | 결과 | 설명 |
---|---|---|
a = b |
부울 |
배트맨 토토 A와 B는 동일합니다. |
a && b |
부울 |
배트맨 토토 A와 B 중첩. |
a @ b |
부울 |
배트맨 토토 a에는 배트맨 토토가 포함되어 있습니다. |
a <@ b |
부울 |
배트맨 토토 A는 배트맨 토토에 포함되어 있습니다. |
a <b |
부울 |
배트맨 토토 A는 배트맨 토토보다 작습니다. |
a <= b |
부울 |
배트맨 토토 A는 배트맨 토토보다 작거나 같거나 동일합니다. |
a b |
부울 |
배트맨 토토 A는 배트맨 토토보다 큽니다. |
a = b |
부울 |
배트맨 토토 A는 배트맨 토토보다 크거나 같거나 동일합니다. |
a < b |
부울 |
배트맨 토토 A는 배트맨 토토와 같지 않습니다. |
a - n |
float8 |
getn -TH CUBE 좌표 (1에서 계산). |
a ~ n |
float8 |
getn -TH 배트맨 토토 좌표 다음 방식으로 배트맨 토토의 좌표 : n = 2 * k -1은의 하한을 의미합니다.K -th dimension, n = 2 * k는 상한을 의미합니다K -th 차원. 부정적인n 해당 양의 좌표의 역 값을 나타냅니다. 이 연산자는 KNN-Gist 지원을 위해 설계되었습니다. |
a <- b |
float8 |
a와 b 사이의 유클리드 거리 |
a <# b |
float8 |
택시 (L-1 메트릭) A와 B 사이의 거리 |
a <= b |
float8 |
Chebyshev (L-inf metric) A와 B 사이의 거리 |
(Postgresql 8.2 이전, 격리 연산자@
and<@
각각 호출@
and~
. 이 이름은 여전히 사용 가능하지만 감가 상각되며 결국 은퇴 할 것입니다. 이전 이름은 이전에 컨벤션에서 반전 된 후 핵심 기하학적 데이터 유형이 뒤 따릅니다!)
스칼라 주문 연산자 (<
, =
et 이 연산자는 먼저 첫 번째 좌표를 비교하고, 동일하면 두 번째 좌표 등을 비교합니다. 주로 B-Tree Index Operator Class for을 지원하기 위해 주로 존재합니다.배트맨 토토
, 예를 들어 A에서 고유 한 제약 조건을 원한다면 유용 할 수 있습니다배트맨 토토
열.
the배트맨 토토
모듈은 또한 GIST 인덱스 연산자 클래스를 제공합니다배트맨 토토
값. 에이배트맨 토토
Gist Index는를 사용하여 값을 검색하는 데 사용될 수 있습니다=
, &&
, @
및<@
운영자여기서
Clauses.
또한 A배트맨 토토
Gist Index는 메트릭 연산자를 사용하여 가장 가까운 이웃을 찾는 데 사용될 수 있습니다<--
, <#
및<=
in주문 by
조항. 예를 들어, 3D 포인트 (0.5, 0.5, 0.5)의 가장 가까운 이웃은 다음과 같이 효율적으로 찾을 수 있습니다.
C <- 배트맨 토토로 테스트 순서에서 C를 선택하십시오 (배열 [0.5,0.5,0.5]) 제한 1;
the~
연산자는 이러한 방식으로 사용하여 선택한 좌표로 정렬 된 처음 몇 값을 효율적으로 검색 할 수 있습니다. 예를 들어, 첫 번째 좌표 (왼쪽 하단)에서 순서대로 첫 몇 개의 배트맨 토토를 얻으려면 다음 쿼리를 사용할 수 있습니다.
C ~ 1 한계 5로 테스트 순서에서 C를 선택하십시오.
그리고 오른쪽 상단 코너 하강의 첫 번째 좌표에 의해 주문 된 2D 배트맨 토토를 가져옵니다 :
C ~ 3 Desc Limit 5;의 테스트 순서에서 C를 선택하십시오.
테이블 F.4사용 가능한 함수를 보여줍니다.
표 F.4. 배트맨 토토 기능
기능 | 결과 | 설명 | example |
---|---|---|---|
배트맨 토토 (float8) |
배트맨 토토 |
두 좌표로 1 차원 배트맨 토토를 만듭니다. | 배트맨 토토 (1) == '(1)' |
배트맨 토토 (float8, float8) |
배트맨 토토 |
1 차원 배트맨 토토를 만듭니다. | 배트맨 토토 (1,2) == '(1), (2)' |
배트맨 토토 (float8 []) |
배트맨 토토 |
배열에 의해 정의 된 좌표를 사용하여 제로 볼륨 배트맨 토토를 만듭니다. | 배트맨 토토 (배열 [1,2]) == '(1,2)' |
배트맨 토토 (float8 [], float8 []) |
배트맨 토토 |
두 배열에 의해 정의 된대로 오른쪽 상단 및 하단 좌표가있는 배트맨 토토를 만듭니다. | 배트맨 토토 (배열 [1,2], 배열 [3,4]) == '(1,2), (3,4)' |
배트맨 토토 (배트맨 토토, float8) |
배트맨 토토 |
새 좌표의 두 엔드 포인트에 대해 동일한 값을 가진 기존 배트맨 토토에 치수를 추가하여 새 배트맨 토토를 만듭니다. 이것은 계산 된 값에서 배트맨 토토를 조각으로 구축하는 데 유용합니다. | Cube ( '(1,2), (3,4)':: Cube, 5) == '(1,2,5), (3,4,5)' |
배트맨 토토 (배트맨 토토, float8, float8) |
배트맨 토토 |
기존 배트맨 토토에 치수를 추가하여 새 배트맨 토토를 만듭니다. 이것은 계산 된 값에서 배트맨 토토를 조각으로 구축하는 데 유용합니다. | Cube ( '(1,2), (3,4)':: Cube, 5, 6) == '(1,2,5), (3,4,6)' |
Cube_dim (Cube) |
정수 |
배트맨 토토의 치수 수를 반환합니다. | Cube_dim ( '(1,2), (3,4)') == '2' |
Cube_ll_Coord (Cube, Integer) |
float8 |
반환n 배트맨 토토의 왼쪽 하단 모서리에 대한 조정 값. |
cube_ll_coord ( '(1,2), (3,4)', 2) == '2' |
Cube_ur_Coord (Cube, Integer) |
float8 |
반환n 배트맨 토토의 오른쪽 상단 모서리의 조정 값. |
Cube_ur_Coord ( '(1,2), (3,4)', 2) == '4' |
cube_is_point (배트맨 토토) |
부울 |
배트맨 토토가 포인트라면, 즉 두 정의 코너가 동일하다면 True를 반환합니다. | |
Cube_distance (배트맨 토토, 배트맨 토토) |
float8 |
두 배트맨 토토 사이의 거리를 반환합니다. 두 배트맨 토토가 포인트 인 경우 이것은 정상 거리 기능입니다. | |
Cube_Subset (Cube, Integer []) |
배트맨 토토 |
배열의 치수 인덱스 목록을 사용하여 기존 배트맨 토토에서 새 배트맨 토토를 만듭니다. 단일 치수의 엔드 포인트를 추출하거나 치수를 삭제하거나 원하는대로 재정렬하는 데 사용할 수 있습니다. | Cube_Subset (Cube ( '(1,3,5), (6,7,8)'), 배열 [2]) == '(3), (7)' Cube_Subset (Cube ( '('(1,3,5), (6,7,8))), 배열 [3,2,1,1]) == '(5,3,1,1), (8,7,6,6)' |
Cube_union (배트맨 토토, 배트맨 토토) |
배트맨 토토 |
두 개의 배트맨 토토의 결합을 생산합니다. | |
Cube_inter (배트맨 토토, 배트맨 토토) |
배트맨 토토 |
두 개의 배트맨 토토의 교차점을 생성합니다. | |
Cube_enlarge (C Cube, R Double, N Integer) |
배트맨 토토 |
지정된 반경만큼 배트맨 토토의 크기를 증가시킵니다r 적어도n 치수. 반경이 음수 인 경우 대신 배트맨 토토가 줄어 듭니다. 정의 된 모든 치수는 반경에 의해 변경됩니다r . 왼쪽 하위 좌표는에 의해 감소합니다.r |r . 왼쪽 하단 좌표가 해당 상단 좌표보다 더 많이 증가한 경우 (이 경우에만 발생할 수 있습니다r <0) 두 좌표보다 평균으로 설정됩니다. 만약에n 정의 된 치수 수보다 크고 배트맨 토토가 확대되고 있습니다 (r 0), 그런 다음 추가 치수가 추가됩니다n 완전히; 0은 추가 좌표의 초기 값으로 사용됩니다. 이 기능은 근처 지점을 검색하기위한 한 지점 주위에 경계 상자를 만드는 데 유용합니다. |
Cube_enlarge ( '(1,2), (3,4)', 0.5, 3) == '(0.5,1.5, -0.5), (3.5,4.5,0.5)' |
나는이 연합을 믿는다 :
cube_union을 선택하십시오 ( '(0,5,2), (2,3,1)', '0'); Cube_union -------------------- (0, 0, 0), (2, 5, 2) (1 행)
상식과 모순되지 않으며 교차로도 마찬가지입니다
cube_inter ( '(0, -1), (1,1)', '(-2), (2)'); Cube_inter ------------- (0, 0), (1, 0) (1 행)
다르게 차원의 배트맨 토토의 모든 바이너리 작업에서, 나는 차원 저 차원이 데카트 투영이라고 가정합니다. i. 예를 들어, 문자열 표현에서 좌표 대신 제로가 생략됩니다. 위의 예는 다음과 같습니다.
Cube_union ( '(0,5,2), (2,3,1)', '(0,0,0), (0,0,0)'); cube_inter ( '(0, -1), (1,1)', '(-2,0), (2,0)';
다음 격리 술어는 포인트 구문을 사용하는 반면 실제로 두 번째 인수는 내부적으로 상자로 표시됩니다. 이 구문은 (박스, 포인트) Predicates에 대한 별도의 포인트 유형과 함수를 정의 할 필요가 없습니다.
cube_contains ( '(0,0), (1,1)', '0.5,0.5'); cube_contains -------------- 티 (1 행)
사용의 예는 회귀 테스트를 참조하십시오SQL/Cube.sql
.
사람들이 물건을 깨기 어렵게하기 위해 배트맨 토토의 크기 수에는 100의 한계가 있습니다. 이것은에서 설정됩니다.cubedata.h
더 큰 것이 필요한 경우
원래 저자 : Gene Selkov, Jr.<selkovjr@mcs.anl.gov
, Argonne National Laboratory의 수학 및 컴퓨터 과학 부서.
주로 Joe Hellerstein 교수에게 감사드립니다 (https : //dsf.berkeley.edu/jmh/) 요점의 요점을 설명하기 위해 (http : //gist.cs.berkeley.edu/), 그리고 그의 전 학생 Andy Dong에게 그의 모범을 보여 주었다. 또한 현재와 과거의 모든 Postgres 개발자에게 내 자신의 세계를 만들고 방해받지 않은 살 수있게 해주셔서 감사합니다. 그리고 저는 데이터베이스 연구에 대한 수년간의 충실한 지원을 위해 Argonne Lab과 미국 에너지 부에 대한 감사를 인정하고 싶습니다.
이 패키지에 대한 사소한 업데이트는 Bruno Wolff III에 의해 만들어졌습니다<bruno@wolff.to
2002 년 8 월/9 월. 여기에는 단일 정밀도에서 이중 정밀도로 정밀도를 변경하고 새로운 기능 추가가 포함됩니다.
추가 업데이트는 Joshua Reich<josh@root.net
2006 년 7 월. 포함배트맨 토토 (float8 [], float8 [])
그리고 더 이상 사용되지 않은 V0 프로토콜 대신 v1 통화 프로토콜을 사용하기 위해 코드를 정리하십시오.