2017-12-19 14 views
1

B + 트리의 리프 노드에는 두 개의 포인터가 있습니다. 하나는 데이터 블록을 가리키고 다른 하나는 다음 인덱스 블록을 가리 킵니다.B + 트리가 다음 블록을 가리키는 포인터를 가져야하는 이유는 무엇입니까?

그러나 B + 트리에서 색인 블록 포인터의 사용법에 대해서는 잘 모르겠습니다. 검색을 수행 할 때 우리는 "is A greater than B"검사를 수행하고 결과적으로 항상 데이터를 포함하는 인덱스 블록으로 이동하게됩니다. 그렇다면 다음 색인 블록으로 이동하기 위해 색인 포인터가 필요한 이유는 무엇입니까?

+0

때때로 모든 트리가 램에 맞지 않으므로 블록 단위로 데이터 블록을 수집합니다. –

답변

1

빠른 순차 순회 (상수 O (1))를 지원합니다. 필요한 모든 것이 랜덤 읽기 요청 인 경우이 포인터를 피할 수 있습니다. 빠른 역 순차 순회가 필요할 때 이전 블록에 포인터를 추가 할 수도 있습니다.

0

A B + 트리는 데이터베이스 색인의 구현에 자주 사용되는 데이터 구조입니다. 트리의 각 노드에는 트리의 하위 노드에 대한 포인터와 키의 정렬 된 목록이 있습니다. 이 포인터는 각각의 키 사이에 있다고 생각할 수 있습니다. 트리에 요소를 검색하거나 삽입하려면 루트 노드를로드하고 검색된 값이있는 인접 키를 찾은 다음 트리의 다음 노드에 해당하는 포인터를 따라갑니다. 재귀는 궁극적으로 원하는 값 또는 값이 존재하지 않는다는 결론을 유도합니다.

이제는이 시나리오를 b + tree에서 검색해야하지만 디스크에있는 모든 디스크가 디스크 액세스가 매우 느리고 한 블록 읽기가 부분 블록 읽기와 같은 시간이 걸린다는 것을 기억하십시오. 숫양에 b + 나무를 맞출 수는 없습니다. 나무의 일부를 숫양에 가져 가서 찾아 보았습니다. 그리고 당신이 찾고있는 것을 찾을 수 없습니다. 디스크 액세스를 낮추기 위해 다음 블록에 대한 포인터를 갖는 것이 좋지 않습니까?