스물두줄

정보관리기술사 · 데이터베이스

B트리와 B+트리

B트리는 자식 수가 정해진 범위에서 변하며 키를 정렬 상태로 유지하는 균형 다진 탐색 트리다. B+트리는 B트리를 변형한 구조로, 키만 내부 노드에 두고 데이터 포인터는 리프에만 둔다. 두 구조는 같은 균형 다진 트리지만 데이터를 두는 위치가 다르다. 이 차이가 핵심…

주요 장면

  1. 0:02 개념 정의
  2. 0:24 B+트리 구조
  3. 0:45 삽입 절차
  4. 1:11 삭제 절차
  5. 1:34 두 구조 비교
  6. 2:07 정리

대본

개념 정의

B트리는 자식 수가 정해진 범위에서 변하며 키를 정렬 상태로 유지하는 균형 다진 탐색 트리다.

B+트리는 B트리를 변형한 구조로, 키만 내부 노드에 두고 데이터 포인터는 리프에만 둔다.

두 구조는 같은 균형 다진 트리지만 데이터를 두는 위치가 다르다. 이 차이가 핵심이다.

B+트리 구조

B+트리의 루트와 내부 노드는 탐색용 키만 가진다. 데이터는 가장 아래 단말 노드에만 있다.

단말 노드는 연결 리스트로 이어져 있어 범위 검색을 순서대로 따라갈 수 있다.

차수 m은 한 노드가 가질 수 있는 최대 자식 수다. 최소 채움률은 구현 기준으로 정한다.

삽입 절차

삽입은 루트에서 시작해 키가 들어갈 리프를 찾고, 정렬 순서대로 키를 넣는 것이다.

키 수가 최대 키 수를 넘으면 노드를 둘로 나누고 중간 키를 부모로 올려 보낸다.

부모도 넘치면 같은 과정을 반복한다. 루트까지 분할되면 새 루트가 생겨 높이가 1 늘어난다.

B+트리는 키를 복사해 부모에 올리고, B트리는 중간 키를 이동시킨다.

삭제 절차

삭제한 뒤에는 노드의 키 수가 최소 기준 이상인지 먼저 확인한다.

미달이면 형제 노드에 여분 키가 있을 때 재분배로 키를 빌려온다.

형제에도 여분이 없으면 형제와 병합하고, 부모에서 키 하나를 내린다.

병합이 루트까지 전파되어 루트 키가 0이 되면 트리 높이가 1 줄어든다.

두 구조 비교

두 구조를 같은 기준으로 비교하면 데이터를 두는 위치가 가장 큰 차이다.

B+트리는 키만 내부 노드에 두어 팬아웃이 커지고 트리 높이가 낮아진다.

B트리는 범위 검색에서 트리를 여러 번 오르내려야 한다. B+트리는 리프를 따라가면 된다.

정리

B트리는 모든 노드에 데이터가 있고, B+트리는 데이터를 리프에만 둔다.

삽입은 분할, 삭제는 재분배나 병합으로 노드 범위를 맞춘다.

검색·삽입·삭제 모두 O(log n)이다. 범위 검색이 잦은 인덱스에는 B+트리가 주로 쓰인다.

같은 장의 영상