CH 6 Multidimensional Index Structure www hansung ac

  • Slides: 48
Download presentation
CH 6 Multi-dimensional Index Structure www. hansung. ac. kr

CH 6 Multi-dimensional Index Structure www. hansung. ac. kr

Parameter Space Indexing

Parameter Space Indexing

Native Space Indexing v 공간객체 밀도(Spatial data object density): 전체 MBR면적의 합을 data space로

Native Space Indexing v 공간객체 밀도(Spatial data object density): 전체 MBR면적의 합을 data space로 나눈 값을 말한다. § 예: data space가 1, 000 X 1, 000 이고 MBR 면적의 합이 2, 000인 경우 § Density= 200, 0000 / 1, 000 X 1, 000 = 2. 0 v Search Operation: 검색연산은 크게 둘로 나뉜다 § Point Search: 주어진 한 점과 overlap 하는 모든 data object를 검색 § Range Search: 주어진 검색 영역과 overlap 하는 모든 data object를 검색

Non-Disjoint Decomposition

Non-Disjoint Decomposition

Non-Disjoint Decomposition 2차원 좌표값

Non-Disjoint Decomposition 2차원 좌표값

R-tree v R-tree의 노드 구조: 루트 노드는 시스템의 부팅 시 가장먼저 upload 되는 정보로서

R-tree v R-tree의 노드 구조: 루트 노드는 시스템의 부팅 시 가장먼저 upload 되는 정보로서 모든 R-tree의 노드로 접근하는 시작점이 된다 v 아래와 같은 형식으로 기록 struct root { struct entry *ent; // points root node int npos; // keep root node position(offset) int Nnum; // Total number of nodes in R-tree FILE *rpt; // File pointer }; v 노드의 구조는 아래와 같다 struct node { int ff; // fill factor int level; int npos; // node position struct entry *ent[CAP]; };

R-tree v 실제 object rectangle과 intermediate rectangle이 R-tree상에서의 표현관계 v 아래의 그림 A 에서

R-tree v 실제 object rectangle과 intermediate rectangle이 R-tree상에서의 표현관계 v 아래의 그림 A 에서 object rectangle 2, 4, 7은 그림 B의 첫 번째 말 단 노드에서 하나의 entry로 각 각 표현 v 이러한 3개의 object rectangle을 완전히 둘러싸는 상위의 intermediate rectangle 11은 한 단계 위의 노드에서 또 다시 하나의 entry로서 표현 v 즉 intermediate rectangle 11도 object rectangle 2, 4, 7과 마찬가 지로 R-tree에서 하나의 entry로 표현 v 그림 A 에서 object rectangle 3, 10은 상위의 intermediate rectangle 12에 내포. 이 경우 intermediate rectangle 11과 12는 서 로 중첩하게 되는데 이것이 non-disjoint decomposition 방식의 색 인 구조의 특징이다.

R-tree

R-tree

R-tree

R-tree

R-tree v 1. 2. Pick. Seed() 1. [calculate inefficiency of grouping entries together] 각

R-tree v 1. 2. Pick. Seed() 1. [calculate inefficiency of grouping entries together] 각 entry 쌍 E 1과 E 2에 대해 E 1. I와 E 2. I를 포함하는 사각형 J를 구성 한다. 아래 식을 계산 d= area(J) - area(E 1. I) - area(E 2. I) [choose the most wasteful pair] choose the pair with the largest d Pick. Next() [determine cost of putting each entry in each group] 그룹에 포함되지 않은 entry E에 대해 계산 d 1= 그룹 1에 E 1. I을 포함하기위해 확장되는 면적 d 2= 그룹 2에 E 1. I을 포함하기위해 확장되는 면적 [find entry with greatest preference for one group]d 1과 d 2사 이 최대 차이를 주는 entry를 선택한다

R-tree v Linear-cost algorithm(): Quadratic Split과 동일하고 Pick. Seed 만 다름 v 1. Linear.

R-tree v Linear-cost algorithm(): Quadratic Split과 동일하고 Pick. Seed 만 다름 v 1. Linear. Pick. Seed() [find extreme rectangles along all dimensions] 각 차원에 대 해 highest low를 갖는 entry를 선택, lowest high side를 갖는 entry를 선택한다. 그 둘의 separation을 기록 2. [adjust shape] separation을 각 차원의 폭으로 나눔으로 normalize한다. 3. [select the most extreme pair] 각 차원에 대해 최대 normalized separation을 갖는 쌍을 선택한다

R+-tree

R+-tree

R+-tree

R+-tree

R+-tree

R+-tree

R+-tree v 아래의 코드는 R+- tree를 구현한 코드의 일부이다. 노드와 entry 의 구조를 보여준다.

R+-tree v 아래의 코드는 R+- tree를 구현한 코드의 일부이다. 노드와 entry 의 구조를 보여준다. #include <stdio. h> #include <string. h> #include <stdlib. h> #define NODE struct node #define ENTRY struct entry #define ROOT struct root #define SECTION struct sect #define ENTMAX 2000 #define NODEMAX 40 #define XRANGE 1000 #define YRANGE 1000

R+-tree #define TOTAL_PAGE 2 // can be set 1 to n #define SUB_CAP 29

R+-tree #define TOTAL_PAGE 2 // can be set 1 to n #define SUB_CAP 29 #define CAP (TOTAL_PAGE * SUB_CAP) #define MAX (CAP * 2)+2 #define PAGESIZE SUB_CAP * ENTSIZE #define COORSIZE 7 #define ENTSIZE 35 #define FIRST_PAGE SUB_CAP * ENTSIZE + 6 //SUB_CAP * ENTSIZE+ (node fill factor 3)+(space 1)+(node level 1)+(space 1) (1022) #define REST_PAGE SUB_CAP * ENTSIZE + 1 //SUB_CAP*ENTSIZE+ eoln 1 (1016) #define NODESIZE (FIRST_PAGE + (REST_PAGE * (TOTAL_PAGE - 1)))

R+-tree struct root { struct entry *ent; // points root node int npos; //

R+-tree struct root { struct entry *ent; // points root node int npos; // keep root node position(offset) int Nnum; // Total number of nodes in tree FILE *rpt; }; // node's level number is smaller than entry's by one struct node { int ff; // fill factor int level; int npos; // node position struct entry *ent[CAP]; };

R+-tree struct entry { struct node *pt; // pointer to chile node int lx;

R+-tree struct entry { struct node *pt; // pointer to chile node int lx; int ly; int ux; int uy; int npos; }; struct sect { int ovcount; int ncount; int spcount; };

www. hansung. ac. kr

www. hansung. ac. kr