단순 트리구조는 한 노드의 하나의 데이터 값만 존재
하드디스크 같은 외부 기억장치들은 블럭 단위로 파일을 입출력
입출력시 발생하는 비용은 파일 크기와 상관없이 동일 (한 블럭에 조금 차있던, 꽉 차있던 비용 동일)
한 블럭에 여러 데이터를 동시 저장하는 것이 효율적
이진트리부터 개선된 트리의 형태이고, 스스로 트리의 균형을 유지한다.
B-Tree는 하나의 노드에 2개 이상의 값을 가지고 있기 때문에 차수(M) 개념 등장
- leaf node를 제외한 내부 node는 [M/2] ~ M개의 자식노드를 가진다.
- 각 node는 [M/2-1] ~ M-1개의 데이터를 가진다.
- 데이터의 수가 K개라면 자식의 수는 K+1이다.
- 한 데이터는 Tree에 한번만 등장한다. (중복x)
- 데이터는 모두 정렬되어 있다.
- 모든 leaf node는 같은 레벨에 존재
- root node부터 탐색
- K를 찾으면 탐색 종료
- K와 데이터 값 비교하며 leaf node까지 반복
- 트리가 비어있다면 root node 할당 후 삽입
- 비어 있지 않다면, 데이터를 삽입 할 leaf node 탐색
- 삽입 후 M차 조건을 만족하면 종료, 아니라면 분리
- 분리가 일어나지 않는 경우
- 분리가 일어나는 경우
삭제는 삽입보다 복잡하고 케이스가 많고, 기본 베이스는 재분배와 합침이다.
1. 리프노드 삭제
- 리프노드의 형제 노드에서 빌려야 할 값 찾기 -> 왼쪽 형제 노드면 최대값, 오른쪽 형제 노드라면 최소값.
- 리프 노드와 형제 노드를 동시에 가리키는 부모 노드 값 찾기
- 삭제 노드를 삭제 후, 2번의 값을 내리고, 1번의 값을 부모로 올린다.
- 조건도 만족하지 않고, 빌려올 수도 없는 경우
2. 내부노드 삭제
B-Tree 시물레이션 https://www.cs.usfca.edu/~galles/visualization/BTree.html
- 리프 노드에 모든 키와 데이터가 존재 / 정렬 / 연결리스트로 연결
O(logN)
- non-leaf node에는 키 값과 포인터만 존재
- 키 값의 중복 등장 가능
- 리프 노드를 제외한 내부 노드는 M/2 ~ M개의 자식노드를 가진다.
- 각 노드는 [M/2 - 1] ~ M-1개의 키를 가진다.
- 키의 수가 K개라면 자식의 수는 K+1이다.
- 리프 노드의 키는 모두 정렬되어 있다.
- 모든 리프 노드는 같은 레벨에 존재
1. 분할이 일어나지 않고, 삽입 위치가 리프 노드의 가장 앞자리가 아닌 경우 : B-Tree와 동일한 방식
2. 분할이 일어나지 않고, 삽입 위치가 리프 노드의 가장 앞자리인 경우 삽입 후 부모 키를 삽입된 키로 갱신
3. 분할이 일어나는 경우
- B-Tree와 동일한 방식으로 분할
기본적 틀은 B-Tree와 비슷하지만, 삭제된 키가 내부노드에 존재할 수 있다는 점이 특징이다.
1. 삭제할 키가 내부노드에 없고, 리프 노드의 처음이 아닌경우 : 그냥 삭제
B+-Tree 시물레이션 https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
- 항상 정렬된 상태로 특정 값보다 크고 작은 부등호 연산에 문제가 없다.
- 포인터가 적기 때문에 많은 데이터가 존재해도 빠르게 접근 가능
- 데이터 탐색, 저장, 수정, 삭제에도 항상 O(logN)
- https://ssocoit.tistory.com/217
- https://code-lab1.tistory.com/217
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ya3344&logNo=221395287263
- https://siahn95.tistory.com/entry/DB-%EC%9D%B8%EB%8D%B1%EC%8A%A4%EB%9E%80-2-%EA%B5%AC%EC%A1%B0-B-Tree-%EA%B3%84%EC%97%B4%EC%9D%84-%EC%93%B0%EB%8A%94-%EC%9D%B4%EC%9C%A0
- https://mommoo.tistory.com/108
- https://velog.io/@emplam27/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-B-Plus-Tree
- https://velog.io/@emplam27/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-B-Tree