[20250422] B-Tree 와 B+Tree 란?

Table of Contents

B-Tree 와 B+Tree 는 모두 트리 구조를 가지는 데이터 구조이다.

두 트리는 데이터 저장 방식, 검색 효율성, 사용 목적에서 중요한 차이점이 있다.

1 데이터 저장 위치

  • B트리
    • 내부 노드와 리프 노드 모두에 데이터를 저장
    • 즉, 트리의 모든 노드가 **키(key)**와 그에 해당하는 **데이터(value)**를 포함할 수 있음.
    • 예: 검색 중 내부 노드에서 원하는 키를 찾으면, 그 자리에서 데이터를 바로 반환할 수 있음.
  • B+트리
    • 리프노드에만 데이터 저장
    • 내부 노드는 키와 자식 노드에 대한 포인터만 포함하며, 데이터는 저장하지 않음.
    • 예: 검색 시 반드시 리프 노드까지 내려가야 데이터를 찾을 수 있음.

저장위치가 바뀌었기 때문에 검색 방식도 바뀐다.

  • B트리
    • 검색 시 내부 노드에서 원하는 키를 찾으면 바로 데이터를 반환
    • 장점: 경우에 따라 리프 노드까지 가지 않아도 데이터를 찾을 수 있어, 특정 상황에서 더 빠를 수 있다.
    • 예: 루트나 중간 노드에서 키를 발견하면 즉시 검색 완료.
  • B+트리
    • 모든 데이터가 리프 노드에 있으므로, 검색은 항상 리프 노드까지 진행.
    • 내부 노드는 검색 경로를 안내하는 인덱스 역할만 수행
    • 예: 내부 노드에 키가 있어도, 실제 데이터는 리프 노드에 있으므로 끝까지 탐색해야함.

이 차이점(리프노드구조)이 B+를 특별하게 만들 수 있게 한다.

2 리프 노드 구조

  • B트리
    • 리프 노드가 서로 연결되어 있지 않음.
    • 순차적으로 데이터를 읽으려면 트리 전체를 탐색해야함. 순차 접근 비효율
  • B+트리
    • 모든 리프 노드가 링크드 리스트처럼 서로 연결되어 있다.
    • 리프 노드에 도달하면 연결된 노드를 따라 순서대로 데이터를 읽을 수 있어, 순차 접근이 매우 효율적.
    • 예: 데이터가 순서대로 정렬되어 있어, 다음 노드로 바로 이동 가능.

3 범위 검색 (Range Query)

  • B트리
    • 범위 검색(예: 10~20 사이의 데이터 조회) 시, 데이터가 내부 노드와 리프 노드에 흩어져 있어 비효율적.
    • 내부 노드와 리프 노드를 모두 방문해야 할 수 있으며, 순차적으로 데이터를 모으려면 트리를 여러 번 탐색해야함.
    • 결론: 대량 데이터 순차 읽기에서 성능 저하.
  • B+트리
    • 모든 데이터가 리프 노드에 순서대로 저장되어 있고, 리프 노드들이 연결되어 있어 범위 검색이 매우 효율적
    • 리프 노드에 도달한 후, 연결된 노드를 따라가며 원하는 범위의 데이터를 빠르게 수집할 수 있음.
    • 예: 데이터베이스의 "SELECT * FROM table WHERE id BETWEEN 10 AND 20" 같은 쿼리에서 우수한 성능.

4 성능

  • B트리
    • 내부 노드에도 데이터를 저장하므로, 한 노드에 저장할 수 있는 키의 수가 상대적으로 적음
    • 트리의 높이가 더 높아질 수 있으며, 검색 시 더 많은 디스크 I/O가 발생할 가능성이 있음을
  • B+트리
    • 내부 노드는 키만 저장하므로, 한 노드에 더 많은 키를 포함할 수 있음. (내부노드에 들어가는 값이 많아짐)
    • 트리가 높이가 낮아짐. 검색 시 디스크 I/O 감소.
    • 대용량 데이터에서 검색 성능이 더 우수.

5 사용사례

  • B트리
    • 주로 파일 시스템에서 사용.
    • 예: 디렉토리 구조에서 각 노드가 파일이나 서브디렉토리 정보를 저장하며, 내부 노드에도 데이터가 필요.
    • 일부 데이터베이스에서도 사용되지만, 범위 검색이 적은 경우에 적합.
  • B+트리
    • 데이터베이스 인덱스에서 널리 사용.
    • 예: MySQL, Oracle, SQL Server 등 대부분의 관계형 데이터베이스 관리 시스템(RDBMS)에서 인덱스로 활용.
    • 범위 검색과 순차 접근이 중요한 작업에 최적화.

5.1 B트리와 B+트리의 차이점 (비교표)

항목 B트리 B+트리
데이터 저장 위치 내부 노드와 리프 노드 모두 리프 노드에만
내부 노드 역할 키와 데이터 저장, 검색 가이드 키만 저장, 검색 가이드
리프 노드 연결 연결 없음 링크드 리스트로 연결
순차 접근 비효율적 (전체 트리 탐색 필요) 효율적 (리프 노드 순회)
검색 효율 단일 키 검색 빠름, 범위 검색 느림 범위 검색과 순차 접근에 우수
저장 공간 내부 노드에도 데이터 저장, 공간 ↑ 내부 노드는 키만, 공간 효율적
트리 높이 상대적으로 높음 (키 수 적음) 낮음 (더 많은 키 저장 가능)
디스크 I/O 더 많은 I/O 발생 가능 더 적은 I/O로 검색 가능
사용 사례 파일 시스템, 일부 DB 데이터베이스 인덱스 (MySQL 등)

5.2 사용 사례 자세히

  • B트리:
    • 파일 시스템: 디렉토리와 파일 메타데이터를 저장하며, 내부 노드의 데이터가 탐색에 직접 활용됨.
      • 예: HFS+ (macOS 파일 시스템)에서 디렉토리 구조 관리.
    • 일부 데이터베이스: 단일 키 검색이 주된 경우(예: 소규모 DB) 사용.
      • 예: 초기 관계형 DB에서 단순 인덱스 구현.
    • 특징: 범위 검색 빈도가 낮고, 노드별 데이터 접근이 중요한 경우 유리.
  • B+트리:
    • 데이터베이스 인덱스: MySQL (InnoDB), Oracle, PostgreSQL 등에서 널리 사용.
      • 예: "SELECT * WHERE age BETWEEN 20 AND 30" 같은 범위 쿼리 최적화.
    • 대용량 데이터 처리: 디스크 기반 시스템에서 I/O 최소화.
      • 예: 검색 엔진의 인덱스 테이블 관리.
    • 특징: 순차 접근과 범위 검색이 빈번하며, 트리 높이 감소로 성능 향상.

5.3 결론

  • B트리: 단일 키 검색과 내부 노드 데이터 활용이 필요한 파일 시스템에 적합.
  • B+트리: 범위 검색, 순차 접근, 디스크 I/O 최소화가 중요한 데이터베이스에 이상적.

사용 목적에 따라 선택하며, 현대 데이터베이스에서는 B+트리가 더 보편적.

Date: 2025-04-22 Tue 00:00

Author: Younghwan Nam

Created: 2025-04-23 Wed 18:00

Emacs 27.2 (Org mode 9.4.4)

Validate