본문 바로가기

Library/File Structure

각 B-트리 구현에서의 차이점

B-트리(tree)의 노드에서 키의 중복을 허용할 것인지, 허용하지 않을 것인지에 따위와 같은 세부 구현은 조금씩 다르다. 일반적으로, 중복되는 키 값은 오류가 발생할 확률이 높고, 공간도 낭비하는 경향이 있다. 그러나, B-트리에서는 이야기가 조금 다른데, B-트리가 한번에 읽어들이는 페이지에서 어떤 키 값을 찾았다고 해보자. 그러나, 이 키 값이 실제 값을 저장하고 있는 것이 아니라 실제 값을 저장하고 있는 다른 노드로의 포인터만 가지고 있다면, 이 페이지를 버리고 해당 페이지를 다시 읽어들어야 하는 낭비가 뒤따른다. 따라서, B-트리의 일반적인 구현에서는 이런 키의 중복을 허용하기도 한다.

또, 키의 상승(promotion)에 있어서 어떤 값을 상위 단계로 올리는지도 조금씩 다르다. 어떤 값이 노드에 들어왔다면, 그 값을 정렬하고, 노드가 가득 차 있는 상태에서 또 다른 값의 입력은 노드의 분할을 야기한다. 이때, 키의 중간 값을 상승하는 키 값으로 선택할 수도 있고, 노드를 반으로 나누었을 때 좌, 우의 키 값에서 가장 큰 값을 올릴 수도 있다.

또, 노드의 차수가 최소 차수를 의미하는 것인지, 아니면 노드가 포함할 수 있는 최대 자손(decendant)를 의미하는 것인지를 파악해야 한다. Bayer와 McCreight는 차수를 최소 차수 t로 정의했기 때문에 한 노드가 포함할 수 있는 최대 키 값은 2t - 1이 되지만, 이것은 경우에 따라서 모호성이 발생할 수 있기 때문에 다른 문헌에서는 B-트리에서의 차수를 한 노드가 가질 수 있는 최대 자손의 수로 정의하는 경우도 있다.