본문 바로가기
목차훔치기/면접을 위한 CS 전공지식 노트

B-트리(면접을 위한 CS 전공지식 노트)

by 해삼2 2023. 10. 12.
728x90
반응형
B-트리

B-트리

B-트리(B-tree)는 데이터베이스와 파일 시스템에서 사용되는 효율적인 데이터 구조로, 

데이터를 효율적으로 저장하고 검색하기 위한 목적으로 설계된 트리 구조입니다. 

B-트리는 여러 용도로 활용되며, 대용량 데이터베이스의 인덱싱, 파일 시스템의 파일 구조, 

그리고 외부 저장소에 저장된 데이터를 효율적으로 관리하는 데 주로 사용됩니다.

 

노드(Node)란

노드(Node)는 B-트리와 같은 트리 구조에서 기본적인 구성 요소입니다. 

트리에서 각 노드는 데이터를 저장하거나 다른 노드와의 연결을 표현하는 객체입니다.

B-트리에서 노드는 일반적으로 다음과 같은 역할을 수행합니다.


데이터 저장: 

B-트리의 리프 노드에서는 실제 데이터 레코드가 저장됩니다. 이 데이터는 주로 정렬된 순서로 저장됩니다.

키 저장: 

B-트리의 내부 노드에서는 키(Key)가 저장됩니다. 

이러한 키를 사용하여 트리를 탐색하고 데이터를 검색합니다.

자식 노드 연결: 

내부 노드에서는 해당 키에 대응하는 자식 노드와의 연결을 저장합니다. 

이러한 연결을 통해 트리를 계층적으로 탐색합니다.

B-트리의 각 노드는 일반적으로 키와 연관된 값(데이터)을 저장하며,

노드의 구조 및 역할은 트리 구조의 종류에 따라 다를 수 있습니다.

B-트리의 경우, 노드는 내부 노드와 리프 노드로 나뉠 수 있으며,

리프 노드에는 실제 데이터가 저장되고 내부 노드에는 키와 해당 키에 대응하는 자식 노드가 저장됩니다.

노드는 트리 구조에서 데이터를 구조화하고 검색 및 관리하는 데 중요한 역할을 합니다. 

이러한 노드들이 계층적으로 연결되어 트리를 형성하며, 데이터의 효율적인 검색과 관리를 가능하게 합니다.

 

B-트리 주요 특징및 동작 방식

균형 트리: 

B-트리는 균형 트리로서, 모든 리프 노드까지의 경로 길이가 거의 동일합니다. 

이러한 균형성은 검색 연산의 속도를 일정하게 유지합니다.

분기 요소: 

B-트리는 각 노드에 여러 개의 자식 노드를 가질 수 있습니다. 

이러한 자식 노드의 개수는 B-트리의 '차수(order)'라고 불립니다. 

B-트리의 차수는 일반적으로 2 이상이며, 높은 차수를 가질수록 트리의 높이가 낮아집니다.

정렬된 저장: 

B-트리는 각 노드 내의 키를 정렬된 순서로 저장합니다. 

이것은 범위 검색과 정렬된 결과를 얻는 데 매우 유용합니다.

탐색과 삽입: 

B-트리는 데이터를 삽입하고 검색할 때 효율적으로 동작합니다. 

검색 연산은 일반적으로 O(log n) 시간 안에 수행됩니다. 

삽입 및 삭제 연산도 O(log n) 시간 안에 수행됩니다.

데이터의 중복 허용: 

B-트리는 중복된 키를 허용할 수 있으며, 

이러한 경우에는 여러 개의 동일한 키를 가진 값들을 저장할 수 있습니다.

분할 및 합병: 

B-트리의 노드는 고정 크기를 유지하기 위해 분할 및 합병이 수행될 수 있습니다. 

이것은 트리의 균형을 유지하고 효율적인 연산을 보장하는 데 중요합니다.

B-트리는 주로 데이터베이스 관리 시스템(DBMS)에서 사용되며, 인덱스 생성, 범위 검색, 정렬된 결과 

반환 등 다양한 작업에 적합합니다. 

또한 B-트리는 파일 시스템에서 파일 블록을 효율적으로 조직하는 데도 사용됩니다. 

데이터가 대용량이거나 동시에 많은 작업이 수행되어야 하는 환경에서 

B-트리는 데이터 구조로서 매우 유용합니다.

 

B-트리의 구조와 개념

루트 노드 (Root Node): 

B-트리의 시작점으로 모든 검색 작업은 루트 노드에서 시작됩니다. 

루트 노드는 최소 하나의 자식을 가집니다.

내부 노드 (Internal Node): 

루트 노드를 포함한 모든 노드는 내부 노드이며, 트리의 중간 부분을 형성합니다. 

내부 노드는 키(Key)와 자식 노드(Child Node)로 구성됩니다. 

이러한 노드에서는 키를 사용하여 어떤 자식 노드로 이동해야 하는지 결정합니다.

리프 노드 (Leaf Node): 

가장 하위 레벨의 노드로, 실제 데이터가 저장되는 곳입니다. 

리프 노드는 키와 해당 키에 대응하는 데이터 값을 가집니다.

차수 (Order): 

B-트리의 각 내부 노드는 일정한 개수의 자식 노드를 가집니다. 

이 개수를 차수(또는 B-트리의 차수)라고 합니다. 차수를 B라고 표기하며, 

B-트리의 성능과 균형에 영향을 미칩니다.

균형 및 규칙:
모든 리프 노드는 동일한 레벨에 있어야 합니다. 

이것은 B-트리의 균형을 유지합니다.
각 내부 노드의 자식의 개수는 (B-1)/2에서 B-1 사이여야 합니다. 

이것은 B-트리의 균형을 보장하고 공간 효율성을 유지합니다.


삽입 (Insertion): 

데이터를 B-트리에 추가할 때, 트리를 탐색하여 적절한 위치를 찾고 리프 노드에 데이터를 삽입합니다. 

삽입 작업 후에도 B-트리의 균형 규칙을 유지하려면 필요에 따라 노드를 분할할 수 있습니다.

검색 (Search): 

데이터를 찾을 때 B-트리는 루트 노드에서 시작하여 내부 노드를 따라가며 트리를 탐색합니다. 

데이터를 찾을 때까지 이 과정을 반복합니다. 

이진 탐색 트리와 달리 B-트리는 균형이 잘 유지되어 빠른 검색 속도를 제공합니다.

삭제 (Deletion): 

데이터를 B-트리에서 제거할 때도 키를 찾고 해당 리프 노드에서 삭제 작업을 수행합니다. 

삭제 후에도 균형을 유지하기 위해 필요에 따라 노드를 합병하거나 재조정할 수 있습니다.

B-트리는 대용량 데이터와 고성능 검색을 위해 설계된 데이터 구조로, 

데이터베이스 시스템과 파일 시스템에서 주로 사용됩니다. 

그것은 데이터의 효율적인 저장과 검색을 가능하게 하는 중요한 역할을 합니다.

 

B-트리 자세히 알기!! EX

B-트리의 차수를 3으로 가정하겠습니다.


루트 노드는 [10] 하나의 키를 가지며, 두 개의 자식 노드를 가집니다.
루트의 왼쪽 자식 노드는 [5, 8] 두 개의 키를 가지며, 세 개의 자식 노드를 가집니다.
루트의 오른쪽 자식 노드는 [15, 20] 두 개의 키를 가지며, 세 개의 자식 노드를 가집니다.
가장 하위 레벨의 노드들은 리프 노드로서, 각 노드는 단일 키와 해당 키에 대응하는 데이터를 가집니다.
예를 들어, B-트리에서 키 12를 검색하려면 다음과 같이 진행합니다.
루트 노드에서 시작하여 [10]과 비교합니다. 12는 10보다 크므로 오른쪽 자식 노드로 이동합니다.
[15, 20]과 비교하여 12는 15보다 작으므로 왼쪽 자식 노드로 이동합니다.
[12]를 찾았으므로 검색이 완료됩니다.
이것이 B-트리의 간단한 예시이며, B-트리는 훨씬 더 큰 규모와 차수를 가질 수 있습니다. 

이 구조를 사용하면 데이터를 효율적으로 관리하고 검색할 수 있으며, 

데이터베이스 시스템과 파일 시스템에서 많이 활용됩니다.


*바쁜 사람을 위한 깜찍한 정리

B-트리란 데이터베이스와 파일 시스템에서 사용되는 효율적인 데이터 구조이며 데이터를 효율적으로 저장하고 검색하기 위한 목적으로 설계된 트리 구조입니다. B-트리에서 데이터, 키를 저장하는 것을 노드라고 하며 노드는 해당 키에 대응하는 자식 노드와 연결되고 서로 계층적으로 탐색이 됩니다. B-트리는 조직 코드에서 많이 사용되고 해당 부서의 상위부서 및 하위 부서를 나타날 때 가장 많이 사용되는 트리 구조라고 생각하면 이해하기 쉬울 거 같습니다.

 

 

728x90
반응형