젠 토토 : 문서 : 9.6 : 젠 토토 | |||
---|---|---|---|
스포츠 토토 결과 PostgreSQL : 문서 : 9.6 : Citext | PostgreSQL : 문서 : 9.6 : 추가 제공 토토 사이트 추천 | 부록 F. 추가 공급 모듈 | PostgreSQL : 문서 : 9.6 : 토토 사이트 순위 |
이 모듈은 데이터 유형을 구현합니다토토 핫다차원 토토 핫를 나타내는 것.
표 F-3에 대한 유효한 외부 표현을 보여줍니다토토 핫타입.x, y등. 부동 소수점 번호를 나타냅니다.
표 F-3. 토토 핫 외부 표현
외부 구문 | 의미 |
---|---|
x | 1 차원 지점 (또는 제로 길이의 1 차원 간격) |
(x) | 위와 동일 |
x1,x2,...,xn | 내 차원 공간의 점, 내부적으로 제로 볼륨 토토 핫로 표현 |
(x1,x2,...,xn) | 위와 동일 |
(x), (y) | 1에서 시작하는 1 차원 간격x및 끝에서y또는 그 반대; 주문은 중요하지 않습니다 |
[(x), (y)] | 위와 동일 |
(x1,...,xn), (y1,...,yn) | 대각선 반대쪽 모서리 쌍으로 표현 된 N- 차원 토토 핫 |
[(x1,...,xn), (Y1,...,yn)] | 위와 동일 |
토토 핫의 반대쪽 모서리를 입력하는 것은 중요하지 않습니다.토토 핫함수는 균일을 생성하는 데 필요한 경우 값을 자동으로 교체합니다"왼쪽 하단 - 오른쪽 상단"내부 표현. 모서리가 일치 할 때토토 핫|"is point"공간 낭비를 피하기위한 깃발.
입력시 공백이 무시되므로[(x), (y)]|[(x), (y)].
값은 내부적으로 64 비트 플로팅 포인트 번호로 저장됩니다. 이것은 약 16 개의 중요한 숫자가있는 숫자가 잘릴 것임을 의미합니다.
표 F-4유형에 제공된 연산자 표시토토 핫.
표 F-4. 토토 핫 연산자
운영자 | 결과 | 설명 |
---|---|---|
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-Thimension. 이 연산자는 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를 사용하여를 사용하여 값을 검색 할 수 있습니다.=, &&, @및<@운영자여기서조항.
또한 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 한계 5;의 테스트 순서에서 C를 선택하십시오.
표 F-5사용 가능한 함수를 보여줍니다.
표 F-5. 토토 핫 기능
기능 | 결과 | 설명 | 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) | Integer | 토토 핫의 치수 수를 반환합니다. | Cube_dim ( '(1,2), (3,4)') == '2' |
Cube_ll_Coord (Cube, Integer) | float8 | 반환n-TH CUBE의 왼쪽 하단 모서리에 대한 조정 값. | 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 (Cube) | 부울 | 토토 핫가 포인트라면, 즉 두 정의 모서리가 동일하다면 진실을 반환합니다. | |
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 Call 프로토콜을 사용하기위한 코드 정리.