B tree
JeongSeulho
2025년 01월 22일
준비중...
클립보드로 복사
B tree
-
BST
와 같은 형태에서 자식 노드가 3개 이상인 트리 -
부모 노드에는 2개 이상의 키를 저장(이 키들은
오름차순 정렬
되어 있음) -
자식 노드는 부모 노드의 키를 기준으로 자식 노드를 나눔
-
자식 노드의 개수가
M
인B tree
를M차 B tree
라고 함
B tree 파라미터
M
: 각 노드의 최대 자식 수M - 1
: 각 노드의 최대 키 수Math.ceil(M / 2)
: 각 노드의 최소 자식 수(단, root, leaf 노드 제외)Math.ceil(M / 2) - 1
: 각 노드의 최소 키 수(단, root 노드 제외)
B tree 특징
- 모든
leaf 노드
는 같은 레벨을 가진다 =>balanced tree
- 검색에서 avf, worst case에서 모두
O(log2 N)
의 시간 복잡도를 가진다 => 항상 일정한 성능을 보장
B tree 삽입
- 항상
leaf 노드
에 삽입(삽입 후 정렬) - 삽입 후 최대 키 수보다 많으면(
M - 1
)- 가운데 키를 기준으로 좌우 노드로 키를 분리
- 가운데 키를 부모 노드로 이동
B tree 삭제
internal 노드
를 삭제하려면 해당 노드를특정 leaf 노드
와 위치를 바꿈,특정 leaf 노드
는 아래 2가지 중 하나- 선임자(
predecessor
) : 나보다 작은 데이터들 중 가장 큰 데이터 - 후임자(
successor
) : 나보다 큰 데이터들 중 가장 작은 데이터
- 선임자(
- 항상
leaf 노드
에서 삭제(삭제 후 정렬) - 삭제 후 최소 키 수보다 적으면(
Math.ceil(M / 2) - 1
) 재조정
B tree가 DB의 index로 사용되는 이유
- avg, worst case에서 조회, 삽입, 삭제 모두
O(log2 N)
의 시간 복잡도를 가짐 - 하지만,
balanced BST
또한 마찬가지로 조회, 삽입, 삭제의 avg, worst case에서 모두O(log2 N)
의 시간 복잡도를 가짐
B tree가 DB의 index로 사용되는 이유
DB가 실제 저장되는 HDD의 2가지 특징으로 인하여 B tree
가 사용됨
- HDD는 속도가 느리다 => 최대한 적게 접근하는 것이 성능에 좋다
- HDD는 데이터를
block
단위로 관리하므로 RAM으로 데이터를 가져올 때도 정해진block
단위로 가져옴 => 이block
에 필요한 데이터도 필요 없는 데이터도 있다, 최대한 많은 필요한 데이터가block
에 들어가야 성능에 좋다
B tree
는BST
에 비하여 레벨이 적다 => 더 적은 접근 횟수로 데이터를 찾을 확률이 높다.B tee
는BST
에 비하여 한 노드에 더 많은 데이터가 있다 => 한block
에 더 많은 데이터를 가져올 확률이 높다.
위 그림의 상황은 각 노드들이 다른
block
에 저장되어 있는 상황