힐베르트 R-트리
Hilbert R-treeR 트리 바리안트인 Hilbert R-tree는 선, 영역, 3차원 객체 또는 고차원 피쳐 기반 파라미터 객체 등의 다차원 객체의 인덱스입니다.다차원 오브젝트용 B+ 트리의 확장이라고 생각할 수 있습니다.
R 트리의 성능은 노드 상의 데이터 직사각형을 클러스터링하는 알고리즘의 품질에 따라 달라집니다.Hilbert R-tree는 공간 채우기 곡선, 특히 Hilbert 곡선을 사용하여 데이터 직사각형에 선형 순서를 부여합니다.
Hilbert R-tree에는 정적 데이터베이스용과 동적 데이터베이스용 두 가지 유형이 있습니다.두 경우 모두 Hilbert 공간 채우기 곡선은 노드에서 다차원 객체의 더 나은 순서를 달성하기 위해 사용됩니다.결과 MBR(최소 경계 직사각형)의 면적과 둘레를 최소화하기 위해 이 순서는 "유사한" 데이터 직사각형을 함께 그룹화해야 한다는 점에서 "양호"해야 합니다.패킹된 Hilbert R-tree는 업데이트가 매우 드물거나 업데이트가 전혀 없는 정적 데이터베이스에 적합합니다.
동적 Hilbert R-tree는 삽입, 삭제 또는 업데이트가 실시간으로 발생하는 동적 데이터베이스에 적합합니다.또한 동적 힐버트 R-트리는 공간 활용도를 높이기 위해 유연한 지연 분할 메커니즘을 사용합니다.모든 노드에는 올바르게 정의된 형제 노드 세트가 있습니다.이는 R 트리 노드에 대한 오더를 제안함으로써 이루어집니다.힐베르트 R-트리는 직사각형 중심 힐베르트 값(MBR)에 따라 직사각형을 정렬합니다(점의 힐베르트 값은 원점에서 점까지의 힐베르트 곡선의 길이입니다).순서를 지정하면 모든 노드에는 명확하게 정의된 형제 노드 세트가 있으므로 지연 분할을 사용할 수 있습니다.스플릿 정책을 조정함으로써 Hilbert R-tree는 필요한 만큼의 공간 사용률을 달성할 수 있습니다.반대로, 다른 R 트리 베리에이션은 공간 사용률을 제어할 수 없습니다.
기본적인 생각
다음 예시는 정적 환경용이지만 R-트리 설계의 직관적인 원리를 설명합니다.이러한 원칙은 정적 데이터베이스와 동적 데이터베이스 모두에 적용됩니다.
Rousopoulos와 Leifker는 거의 100%의 공간 활용률을 달성하는 패킹 R-트리를 구축하는 방법을 제안했습니다.아이디어는 직사각형의 모서리 중 하나의 x 또는 y 좌표에 대한 데이터를 정렬하는 것입니다.네 개의 좌표 중 하나를 정렬해도 유사한 결과가 나타납니다.이 토론에서는 직사각형의 왼쪽 아래 모서리의 x좌표에 점 또는 직사각형이 정렬되어 있으며 이를 "낮은 R-트리"라고 합니다.정렬된 직사각형 목록이 스캔되고 연속된 직사각형은 해당 노드가 가득 찰 때까지 동일한 R 트리 리프 노드에 할당되며 이후 새 리프 노드가 생성되고 정렬된 목록의 스캔이 계속됩니다.따라서 각 레벨의 마지막 노드를 제외하고 결과 R-트리의 노드는 완전히 패킹됩니다.이것에 의해, 공간 활용률이 100%이하가 됩니다.트리의 상위 레벨도 비슷한 방법으로 생성됩니다.
그림 1은 Lowx 패킹 R-Tree의 문제를 나타내고 있습니다.그림 1 [오른쪽]은 그림 1 [왼쪽]의 포인트에 대해 lowx 패킹 방법이 생성하는 R 트리의 리프 노드를 나타냅니다.결과적으로 상위 노드가 거의 영역을 커버하지 않는다는 사실은 Lowx 패킹된 R-tree가 포인트 쿼리에 대해 뛰어난 성능을 발휘하는 이유를 설명합니다.그러나 아버지의 주변이 크다는 것은 지역 쿼리의 성능 저하를 설명해 줍니다.이는 R-트리 [1]성능의 분석 공식과 일치합니다.직관적으로 패킹 알고리즘은 가까운 점을 같은 리프 노드에 할당하는 것이 이상적입니다.lowx packed R-tree가 y좌표를 모르면 이 경험적 규칙을 위반하는 경향이 있습니다.
그림 1: [왼쪽] 200개의 포인트가 균일하게 분포되어 있다.[오른쪽] [lowx packed R-tree]알고리즘에 의해 생성된 노드의 MBR
다음 섹션에서는 Hilbert R-tree의 두 가지 변형에 대해 설명합니다.첫 번째 인덱스는 업데이트가 매우 드물거나 업데이트가 전혀 없는 정적 데이터베이스에 적합합니다.각 레벨의 마지막 노드를 제외하고 결과 R-트리의 노드는 완전히 패킹됩니다.따라서 공간 사용률은 100% 이상이며, 이 구조를 패킹된 힐버트 R 트리라고 합니다.Dynamic Hilbert R-tree라고 불리는 두 번째 인덱스는 삽입 및 삭제를 지원하며 동적 환경에 적합합니다.
Hilbert R-tree 포장
다음은 힐베르트 곡선에 대한 간략한 소개입니다.H로1 표시된 2x2 그리드의 기본 힐버트 곡선은 그림 2와 같다.순서 i의 곡선을 도출하기 위해 기본 곡선의 각 정점은 순서 i – 1의 곡선으로 대체되며, 이 곡선은 적절히 회전 및/또는 반사될 수 있다.그림 2는 2차 및 3차 힐베르트 곡선도 보여줍니다.곡선의 순서가 다른 공간 채우기 곡선과 같이 무한대인 경우 결과 곡선은 프랙탈 치수가 [1][2]2인 프랙탈입니다.힐버트 곡선은 고차원에 대해 일반화할 수 있습니다.소정의 차수의 2차원 곡선을 그리기 위한 알고리즘은 [2]및 에서 찾을 수 있다.고차원의 알고리즘이 [4]제시되어 있다.
공간 채우기 곡선의 경로는 그리드 점에 선형 순서를 부과합니다. 이 경로는 원곡선의 한쪽 끝에서 시작하여 다른 쪽 끝까지 경로를 따라 계산될 수 있습니다.각 점의 실제 좌표 값을 계산할 수 있습니다.그러나 힐베르트 곡선의 경우 이는 예를 들어 Z-차 곡선보다 훨씬 어렵습니다.그림 2는 4x4 그리드에 대한 이러한 순서 중 하나를 보여줍니다(곡선2 H 참조).예를 들어 H 곡선의2 점(0,0)은 힐버트 값이 0이고 점(1,1)은 힐버트 값이 2입니다.직사각형의 힐베르트 값은 사각형 중심의 힐베르트 값으로 정의됩니다.
그림 2: 순서 1, 2, 3의 힐버트 곡선
힐버트 곡선은 데이터 직사각형에 선형 순서를 부과한 다음 정렬된 목록을 통과하여 각 C 직사각형 세트를 R-트리의 노드에 할당합니다.그 결과, 같은 노드상의 데이터 직사각형 세트는 선형 순서에서 서로 가깝고, 대부분의 경우 네이티브 공간에서 가깝습니다.따라서 결과 R-트리 노드의 면적은 작아집니다.그림 2는 Hilbert 기반 방법이 우수한 성능을 제공하는 직관적인 이유를 보여줍니다.데이터는 점(그림 1과 같은 점)으로 구성됩니다.힐버트 값에 따라 점을 그룹화함으로써 결과 R-트리 노드의 MBR은 작은 정사각형 모양의 직사각형인 경향이 있다.이는 노드의 면적과 주변이 작을 수 있음을 나타냅니다.면적 값이 작을수록 점 조회에 대한 성능이 향상되고 면적 및 둘레 값이 작을수록 더 큰 조회에 대한 성능이 향상됩니다.
Hilbert-Pack 알고리즘
(사각형으로 R-트리를 채웁니다.
스텝 1각 데이터 직사각형에 대한 Hilbert 값 계산
스텝 2Hilbert 값 오름차순의 데이터 직사각형 정렬
3단계. /* 리프 노드 생성(레벨 l=0) */
- (더 많은 직사각형이 있음)
- 새로운 R 트리 노드를 생성하다
- 이 노드에 다음 C개의 직사각형 할당
스텝 4. /* 상위 레벨의 노드 작성 (l + 1) */
- (레벨 1에 1개 이상의 노드가 있다)
- 오름차순 작성 시 레벨1 0 0으로 노드를 정렬합니다.
- 순서 3을 반복합니다.
여기서는 데이터가 정적이거나 수정 빈도가 낮다고 가정합니다.이는 공간 활용률이 100% 이하인 R-트리를 구축하기 위한 단순한 휴리스틱으로, 동시에 응답 시간이 우수합니다.
다이내믹 힐베르트 R-트리
R 트리의 성능은 노드 상의 데이터 직사각형을 클러스터링하는 알고리즘의 품질에 따라 달라집니다.Hilbert R-tree는 공간 채우기 곡선, 특히 Hilbert 곡선을 사용하여 데이터 직사각형에 선형 순서를 부여합니다.직사각형의 힐베르트 값은 사각형 중심의 힐베르트 값으로 정의됩니다.
트리 구조
Hilbert R-tree의 구조는 다음과 같습니다.리프 노드는 각 형식l(R, obj_id)의 최대 C 엔트리를 포함한다.여기서l C는 리프 용량, R은 실 오브젝트(xlow, xhigh, ylow, yhigh)의 MBR, obj-id는 오브젝트 기술 레코드에 대한 포인터이다.Hilbert R-tree와 R*-tree의 주요 차이점은 LHV(가장 큰 Hilbert 값)에 대한 정보도 리프 노드에 포함된다는 것입니다.따라서 Hilbert R-tree의 Non-leaf 노드는 형식(R, ptr, LHV)의 최대n C개의 엔트리를 포함합니다.여기서n C는 Non-leaf 노드의 모든 자식을 포함하는 MBR, ptr은 하위 노드에 대한 포인터이며 LHV는 데이터 중 가장 큰 Hilbert 값입니다.비리프 노드는 자녀의 힐버트 값 중 하나를 자체 LHV 값으로 선택하므로 비리프 노드의 MBR의 힐버트 값을 계산하는 데 추가 비용이 들지 않습니다.그림 3은 힐베르트 R-트리에 정리된 직사각형을 보여줍니다.중앙의 Hilbert 값은 "x" 기호 근처의 숫자입니다(상위 노드 "II"에만 표시됨).LHV는 [브래킷]에 있습니다.그림 4는 그림 3의 트리가 디스크에 어떻게 저장되어 있는지를 나타내고 있습니다.상위 노드의 내용은 다음과 같습니다.II"에 대해 자세히 설명합니다.노드 "I"의 모든 데이터 직사각형은 힐베르트 값 v ; 33을 갖습니다. 마찬가지로 노드 "의 모든 직사각형도 마찬가지입니다.II"는 33 및 § 107보다 큰 힐베르트 값을 가진다.
그림 3: Hilbert R-tree로 구성된 데이터 직사각형(Hilbert 값과 최대 Hilbert 값(LHV)은 괄호 안에 있음)
플레인 R 트리는 오버플로우 시 노드를 분할하여 원래 노드에서2개의 노드를 만듭니다.이 정책을 1 대 2 분할 정책이라고 합니다.2개의 노드가 3개로 분할될 때까지 기다리면서 분할을 연기할 수도 있습니다.이는 B* 트리 분할 정책과 유사합니다.이 방식을 2 대 3 분할 정책이라고 합니다.
일반적으로 이것은 s-to-(s+1) 분할 정책으로 확장할 수 있습니다.여기서 s는 분할 정책의 순서입니다.순서 분할 정책을 구현하려면 오버플로우 노드는 엔트리의 일부를 s - 1 형제 중 하나에 푸시하려고 합니다.이것들이 모두 가득 차면 s-to-(s+1) 분할을 수행해야 합니다.s-1 형제자매는 협동 형제라고 불립니다.
다음으로 검색, 삽입 및 오버플로 처리를 위한 알고리즘에 대해 자세히 설명합니다.
검색 중
검색 알고리즘은 다른 R 트리 베리에이션에서 사용되는 알고리즘과 유사합니다.루트부터 트리를 내려 쿼리 직사각형을 교차하는 모든 노드를 검사합니다.리프 레벨에서는 쿼리 창 w와 교차하는 모든 엔트리가 정규화된 데이터 항목으로 보고됩니다.
알고리즘 검색(노드 루트, rect w):
S1. 리프 이외의 노드 검색:
- MBR이 쿼리 창 w와 교차하는 모든 엔트리에 대해 검색을 호출합니다.
S2. 리프 노드 검색:
- 쿼리 창 w를 통과하는 모든 엔트리를 후보로 보고합니다.
그림 4: Hilbert R-Tree의 파일 구조
삽입
힐베르트 R-트리에 새 직사각형 r을 삽입하려면 새 직사각형 중앙의 힐베르트 값 h를 키로 사용합니다.각 레벨에서 모든 형제 노드 중 최소 LHV 값이 h보다 큰 노드가 선택됩니다.리프 노드에 도달하면 h에 따라 직사각형 r이 올바른 순서로 삽입됩니다. 리프 노드 N에 새 직사각형을 삽입한 후 조정상위 수준 노드에서 MBR 및 최대 힐버트 값을 수정하기 위해 트리가 호출됩니다.
알고리즘 삽입(노드 루트, rect r): /* 힐버트 R-트리에 새 직사각형 r을 삽입합니다.h는 직사각형의 힐버트 값*/
I1. 적절한 리프 노드를 찾습니다.
- ChooseLeaf(r, h)를 호출하여 r을 배치할 리프 노드 L을 선택합니다.
I2. 리프 노드 L에 r을 삽입합니다.
- L에 빈 슬롯이 있는 경우 의 L에 r을 삽입합니다.
- 힐베르트 명령에 따른 적절한 장소와 반환.
- L이 가득 차면 HandleOverflow(L,r)를 호출합니다.
- 분할이 불가피할 경우 새 잎을 반환한다.
I3. 위쪽으로 변경 전파:
- L과 그 협력하는 형제들을 포함하는 집합 S를 형성합니다.
- 새로운 잎(있는 경우)이 있습니다.
- Adjust Tree(S)를 호출합니다.
I4. 나무 높이 키우기:
- 노드 분할 전파로 인해 루트가 분할된 경우,
- 두 개의 결과 노드가 자식인 새 루트.
Algorithm ChooseLeaf(rect r, int h):
/* 새 직사각형을 배치할 리프 노드를 반환합니다. */
C1. 초기화:
- N을 루트 노드로 설정합니다.
C2. 리프 체크:
- N이 리프_이면 N을 반환합니다.
C3. 서브트리를 선택합니다.
- N이 리프 노드가 아닌 경우 엔트리(R, ptr, LHV)를 선택합니다.
- 최소 LHV 값이 h보다 큰 경우.
C4. 잎에 도달할 때까지 하강합니다.
- N을 ptr이 가리키는 노드로 설정하고 C2부터 반복합니다.
Algorithm Adjust Tree(세트 S):
/* S는 갱신되는 노드, 그 협력하고 있는 노드(오버플로가 발생한 경우) 및 새로운 노드를 포함하는 노드 세트입니다.
생성된 노드 NN(분할이 발생한 경우)이 루틴은 리프 레벨에서 루트로 상승하여 S의 노드를 커버하는 노드의 MBR 및 LHV를 조정합니다.분할(있는 경우)을 전파합니다.* /
A1. 루트 레벨에 도달하면 정지합니다.
A2. 노드 분할을 위로 전파합니다.
- Np를 N의 부모 노드로 합니다.
- N이 분할된 경우 NN을 새 노드로 합니다.
- Np에 NN을 Hilbert에 따라 올바른 순서로 삽입합니다.
- 가치가 있습니다.그렇지 않으면 HandleOverflow(Np, NN)를 호출합니다.
- Np가 분할된 경우 PP를 새로운 노드로 합니다.
A3. MBR 및 LHV를 상위 레벨에서 조정합니다.
- P를 S의 노드의 부모 노드 세트라고 합니다.
- P에 있는 노드의 해당 MBR과 LHV를 적절히 조정한다.
A4. 다음 단계로 이동합니다.
- S를 부모 노드 P의 세트로 합니다.
- NN = PP(Np가 분할된 경우).
- A1부터 반복합니다.
삭제
Hilbert R-tree에서는 아버지 노드가 부족할 때마다 고립된 노드를 다시 삽입할 필요가 없습니다.대신 형제자매에서 키를 빌리거나 언더플로우노드를 형제자매와 Marge할 수 있습니다.이는 노드의 순서가 명확하기 때문에 가능합니다(Margest Hilbert Value, LHV에 따르면). 반면 R-tree에서는 형제 노드에 대한 개념이 없습니다.삭제 작업에는 협력하는 형제자매가 필요하며 삽입 작업에는 s - 1 형제자매가 필요합니다.
알고리즘 삭제(r):
D1. 호스트 리프 찾기:
- 정확하게 일치하는 검색을 수행하여 리프 노드 L을 찾습니다.
- r이 포함되어 있습니다.
D2. 삭제:
- 노드 L에서r을 삭제합니다.
D3. L이 언더플로우일 경우
- 협력하는 형제자매로부터 엔트리를 빌립니다.
- 모든 형제들이 언더플로우할 준비가 되어 있다면요
- s + 1을 s 노드에 병합합니다.
- 결과 노드를 조정합니다.
D4. MBR과 LHV를 상위 레벨로 조정합니다.
- L과 그 협동체를 포함하는 집합 S를 형성하다
- 형제자매(언더플로우가 발생한 경우)
- Adjust Tree(S)를 호출합니다.
오버플로우 처리
Hilbert R-tree의 오버플로우 처리 알고리즘은 일부 엔트리를 s - 1 공동 형제 중 하나로 이동하거나 s 노드를 s +1 노드로 분할하여 오버플로우 노드를 처리합니다.
알고리즘 HandleOverflow(노드 N, rect r):
/* 분할이 발생한 경우 새 노드를 반환합니다.*/
H1 be는 N의 모든 엔트리를 포함하는 세트로 합니다.
- s - 1 협력형제입니다.
H2. ε에 r을 더합니다.
H3. s - 1 협력 형제 중 하나 이상이 채워지지 않은 경우,
- 힐버트 값에 따라 s 노드 간에 균등하게 δ를 분배한다.
H4. 협력하는 형제자매가 다 차면
- 새 노드 NN을 생성하고
- 따라서 s+1 노드에 균등하게 ute를 분배한다.
- 힐베르트 값으로
- NN을 반환한다.
메모들
- ^ a b I. 카멜과 C.Faloutos, On Packing R-tree, 제2차 국제 ACM Conference on Information and Knowledge Management(CIKM), 490~499쪽, 워싱턴 D.C., 1993.
- ^ a b H. 자가디쉬여러 속성을 가진 개체의 선형 클러스터링입니다.ACM SIGMOD Conf.의 Proc., 페이지 332–342, 뉴저지주 애틀랜틱 시티, 1990년 5월
- ^ J 그리피스공간 채우기 곡선의 클래스를 표시하는 알고리즘, Software-Practice and Experience 16(5), 403-411, 1986년 5월.
- ^ T. 바이리공간을 채우는 곡선.그 세대와 대역폭 삭감에 대한 적용.IEEE 트랜스'정보이론'에 대해서요IT15(6), 658-664, 1969년 11월
- ^ Beckmann, N.; Kriegel, H. P.; Schneider, R.; Seeger, B. (1990). "The R*-tree: an efficient and robust access method for points and rectangles". Proceedings of the 1990 ACM SIGMOD international conference on Management of data - SIGMOD '90 (PDF). p. 322. doi:10.1145/93597.98741. ISBN 0897913655. Archived from the original (PDF) on 2018-04-17. Retrieved 2015-09-02.
레퍼런스
- I. 카멜과 C.팔루토스.병렬 R-Tree.ACM SIGMOD Conf.의 Proc.,(195-204페이지), 캘리포니아 샌디에이고, 1992년 6월.테크니컬로도 이용 가능.UMIACS TR 92-1, CS-TR-2820을 보고한다.
- I. 카멜과 C.팔루토스.힐버트 R-트리:프랙탈을 사용한 개량된 R 트리.VLDB Conf.의 대리인, 칠레 산티아고, 500~509쪽, 1994년 9월.Tech_Report UMIACS TR 93-12.1 CS-TR-3032.1로도 이용할 수 있습니다.
- N. Koudas, C.팔루토스와 나 카멜이야멀티컴퓨터 아키텍처 공간 데이터베이스 디클러스터링, 데이터베이스 테크놀로지 확장에 관한 국제회의(EDBT), 592~614페이지, 1996.
- 루소풀로스와 D.레이프커패킹된 R-Tree를 사용하여 그림 데이터베이스에서 직접 공간 검색.ACM SIGMOD의 Proc., 17-31페이지, 텍사스 오스틴, 1985년 5월
- 슈뢰더 씨프랙탈, 혼돈, 멱함수의 법칙: 무한낙원으로부터의 몇 분.W.H. Freeman and Company, 뉴욕, 1991년
- T. 셀리스, N. 루소풀로스 및 C.팔루토스.R+-Tree: 다차원 객체의 동적 인덱스입니다.Proc. 13th International Conference on VLDB, 507-518쪽, 영국, 1987년 9월.