인덱스 트리를 기본 --B 원칙, B + 트리

  파일 스토리지 시스템에서 B - 트리, 왜 수행을 저장하는 데 사용됩니다? 이것이 그 이유는 무엇입니까?

  우리는 많은 양의 데이터에 쿼리 데이터로 이동하는 경우, 하나 개의 비교에 의해 하나 하나 개 비교하여 알고리즘의 하나의 시간 복잡도 생각하는 가장 쉬운 방법은 O (n)이되고, 속도가 느린 점을 것으로 보인다. 그런 다음 우리는 AVL 트리와 같은 데이터 구조의 복잡성이 검색 시간을 생각 O (logn), 찾는 이진 검색의 아이디어를 사용해서 데이터를 정렬하고하는 것입니다, 물론, O의 시간 복잡도 (logn) 인 , 다음에 AVL 트리를 사용, 왜해야 B- 트리에서 B-트리, 첫번째보기의 도입

  먼저, B 트리, 그냥 주문 m의 트리를 검색, 이진 검색 트리입니다 다음과 같은 속성이 있습니다 :

1.树中的每个节点最多有m个孩子
2.除根节点和叶子节点的节点孩子数至少为ceil(m-1)
3.除根节点外的关键字数至少为 ceil(m-1)-1<=关键字<=m-1
注:ceil为取上限函数

그냥 설명 돌아와 후 자녀의 수와 적어도 너무 많은 키워드의 수, 우리는 B 트리 삽입을 살펴 이유는 이러한 기능을 이해하지 못하는 참조하고

B 트리 삽입

그림은, 순서 B 종 5 문자 집합을 삽입합니다
CNGAHEKQMFWLTZDPRXYS은
, 이진 트리 검색, 사전 삽입 5, 오른쪽에 크고 작은 왼쪽의 동일한 속성을 따르지 삽입 필요성을 언급

그림 삽입 설명 여기
순서 (5)이기 때문에, (4) 대부분의 노드 키, 즉, G, AC, 및 좌측 및 우측 아이를 올려 각각 HN, 분할 할 필요가
그림 삽입 설명 여기
다음과 같이 삽입 E, K가 N이 적당한 위치를 발견 :
그림 삽입 설명 여기
삽입 M은, 삽입 노드 (5)가 충족되어 발견 다음 노드가 분할
그림 삽입 설명 여기
F, W, L 삽입 적절한 위치를 찾아, T는
그림 삽입 설명 여기
Z 삽입 삽입 노드 NQTWZ 다섯이 충족 발견, 그것은 최대 필요 도시 한 바와 같이 분리는
그림 삽입 설명 여기
D 삽입, 현재 노드가 postmitotic 다음 ACDEF, 분할 할 필요가있다 :
그림 삽입 설명 여기
P는, R은, X, Y 삽입물
그림 삽입 설명 여기
삽입 S가 현재 노드 NPQRS이되고, Q는 분할 완성 분할은 다음과 같다 :
그림 삽입 설명 여기
다음을 발견 (5) 루트 노드가 DGMQT이 필요 분열을 계속하는 M까지 가야
그림 삽입 설명 여기
  이 M의 삽입을 완료, 그리기 계속 여기에 우리는 또한 절대 B-트리를 이해하지 못할 후자는 균형, 그것은 때문이다 그 결과를 분할. 삽입 된 노드가 직접 현재 노드 삽입 노드가 가득 찼을 때, 현재 노드가 새 키를 삽입 할 부모 노드가 동등 분할 후 분할해야합니다으로, 풀 타임이 아닌 경우 노드 삽입 과정을 요약하면 완전하지 않을 경우 전체 경우 단어, 직접 삽입, 다음 위쪽으로 반복하는을 계속합니다.

  두 번째 B 트리의 세 가지 속성을 설명하려면 여기를. 분할되면, 분할되는 제 1 키에 의해 감소 ​​될 것이다 원래 노드의 수는 m의 핵심 인 경우, 노드 키는, (m-1) 후에 분리하고, 수의 적어도 절반에 분배 / 상한 CEIL 경우 2 여기를 수행하기 위해, 하한을 (m / 2) -1, 두 결과는 동일하다. 만약 적어도 CEIL에서 키워드의 개수 (m / 2) -1, 숫자 키 1보다 큰 아이의 다음 번호, 즉 CEIL (m / 2)

그림 삽입 설명 여기
그림은 파란색 키워드, 노란색 아이들을 나타내며, 필요가 B 트리를 완료 할 이유 AVL은, 할 수있는 이유를 설명 이제 바인딩 키워드 데이터 라인과 빨간색, B-나무도이다 :
  각 레벨에 많은 양의 데이터가 디스크에 있기 때문에 쿼리가 우려되는 데이터의 전송이 운영 체제 수준에서 디스크 IO를 완료하는 데 필요한 때마다 그래서, 그것은 메모리 페이지에, 올 때 달성 장치는 디스크없이 데이터 량마다 디스크 IO의 크기의 블록 단위이며, 최소 폐기물 결과 단위 등의 데이터 블록 수, 목 높이 B는 즉, 매우 낮은 것 약간의 높이 , 당신은 가능한 실제 환경에 따라서 디스크 IO가 단위 블록 데이터의 전체를 사용하게됩니다 있도록, 수백 B-트리를 주문할 때, 여러 디스크 IO를 수행해야합니다. 결론적으로, B 트리의 사용, AVL 트리 대신, 디스크 IO의 수를 줄이고, 폐기물을 줄이는 것입니다.

아래와 같이 그러나, 실제 공정에서, B + 트리를 사용하여, B는 나무, B + 트리의 진화 된 버전입니다 :
그림 삽입 설명 여기
마찬가지로, 블루 키, 노란색 아이, 빨간색은 키워드 데이터 라인과 결합되어 것이다 그것은 여러 가지 B- 트리와 B의 + 트리 기능을 발견 :

  1. 데이터를 얻을 수있는 시간이 동일하므로 데이터는 리프 노드에 나타납니다. 트렁크 노드를 검색하는 데 사용됩니다
  2. 질문의 범위에 더 도움이되는 전체 데이터 테이블을 중독 체인가있다

그런 다음 B-트리의 장점에 대하여 B + 트리 쿼리 다음과 같은 세 가지 포인트가 있습니다 :

  1. 키워드 만 검색의 잎 이외의 노드에 사용되기 때문에 더 같은 블록이 쿼리 트리의 더 낮은 높이, 더 높은 효율성 키워드를 포함 할 수 있도록 행 어드레스 데이터는 저장되지 않습니다
  2. 데이터 로우 어드레스는 리프 노드에 있으므로 쿼리의 시간은 상대적으로 안정적이기 때문에
  3. 범위 쿼리에 너무 많은 도움이, 연결리스트 포인터로 인해
게시 된 117 개 원래 기사 · 원 찬양 283 ·은 60000 +를 볼

추천

출처blog.csdn.net/weixin_42220532/article/details/104411533