SunFly의 코딩 및 정보 블로그

B+Tree 알고리즘이란? 본문

알고리즘

B+Tree 알고리즘이란?

SunFly 2021. 10. 11. 20:20

■ 실제로 가장 널리 활용되는 구조

 

■ 인덱스 구조와 시퀀스셋(data node set)으로 구성됨.

 

※ 인덱스 구조(Index)

  • 각 노드가 record 대신 key값만 저장된 B-tree 구조
  • 노드의 key값은 데이터 노드로 찾아가는데 이용하는 navigation에 이용
  • B-tree의 요구와 조건은 모두 충족시켜야함.

※ 시퀀스셋(data node set)

  • 데이터 노드들의 연결리스트로 구성됨.
  • 노드는 데이터 즉 record들을 가짐. (모든 레코드가 저장됨.)
  • 모든 record는 key값 순서로 정렬되어 있음.

▶인덱스 구조의 루트 노드를 제외한 모든 노드들은 "at least half full(절반 이상)" 조건을 만족함.

(단, 초기 상황은 예외)

 

※ B+tree의 장점

  • 범위 탐색(Range Search)가 가능
  •     (1) leaf 노드들끼리 연결리스트로 구성되어 있어 순차적인 범위 탐색에 유리.
  •     (2) 범위 탐색은 먼저 시작하는 key 값을 스캔하여 해당 leaf노드를 찾은 다음 leaf 노드만을 따라가면서 검색.
  • 인덱스 구조의 노드들은 branching factor(=capacity order)를 크게 할 수 있음.
  •     (1) 이유: record의 key값만 저장하므로.
  •     (2) 결론: 트리의 height가 낮아져 빠른 검색이 가능함.

※ B+tree node 타입 선언

 

typedef struct idxnode* type_ptr_idxnode;

typedef struct datanode* type_ptr_datanode;

 

typedef struct idxnode {   // 인덱스 노드

    type_key key[2*d1];

    type_ptr_idxnode ptri[2*d1 + 1];

    type_ptr_datanode ptrd[2*d1 + 1];

    int fill_cnt;

} type_idx_node;

 

typedef struct datanode {   // 데이터 노드

    type_rec rec[2*d2];

    type_ptr_datanode link;

    int fill_cnt;

} type_data_node;