Структура B+-дерева

 

СОДЕРЖАНИЕ


ВВЕДЕНИЕ

. Сбалансированные многоходовые деревья поиска

.1 В+-дерево, структура

.2 Характеристика

.3 Утверждение о высоте

. Основные операции B+дерева

.1 Поиск записи

.2 Вставка записи

.3 Удаление записи

.4 Поиск по диапазону

. B+-деревья в системах баз данных

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

ПРИЛОЖЕНИЕ


ВВЕДЕНИЕ


Все записи из таблицы в СУБД хранятся на дисках, чтобы гарантировать их неизменность в случае сбоев. Записи в таблице организованы в файлах, которые управляются СУБД, а не ОС. Всякий раз, когда запрос отправляется в СУБД, он обрабатывается и записи из таблицы, удовлетворяющие запросу, возвращаются СУБД. То, каким образом обрабатывается запрос, зависит от конкретной структуры хранения записей в файле. Если записи организованы в произвольном порядке то такую структуру хранения называют кучи.

Для извлечения записей из файла организованного кучей, все, что СУБД может сделать, это последовательно просканировать дисковые страницы, где хранятся записи. Обычно страницы, которые составляют файл, являются смежными на диске.

Если, с другой стороны, эти записи хранятся в файле в определённом порядке, то бинарный поиск может быть использован для извлечения записей до тех пор, пока критерии запроса совпадают с атрибутами, которые используются для поддержания порядка сортировки в файле. Например, если файл, который хранит записи для таблицы Students, отсортирован по фамилии и имени (в таком порядке), то бинарный поиск может быть использован для обработки запросов, чтобы искать студентов только по фамилии или по их полному имени. Запрос, который ищет студентов по их дате рождения, должен быть обработан с использованием последовательного сканирование отсортированного файла, аналогично, если запрос ищет студентов по их имени.

Индекс-таблицы представляет собой структуру данных и связанные с ней алгоритмы, обеспечивающие механизм, посредством которого записи таблицы можно искать более эффективно, чем при любом последовательном сканирование или бинарном поиске. Наиболее распространенные структуры индекса, используемые в СУБД, являются B + -деревья и хеш-таблицы.

. Сбалансированные многоходовые деревья поиска


Время, нужное для извлечения информации из внешней памяти (например с диска), в тысячи раз больше, чем для извлечения той же информации, но из оперативной памяти. Целью внешнего поиска является сведение к минимуму количества обращений к диску, так как доступ к нему занимает больше времени, чем вычисления. Это отличается от цели минимизации количества вычислений (т.е. сравнений) в поиске данных, которые находятся в более быстрой, оперативной памяти. По этой причине, при типичном доступе к записи из внешней памяти, происходит чтение целой страницы или блока данных сразу.+-дерево является одним из семьи многоходовых деревьев поиска (другие: B-дерево, 2-3-4 Дерево, В * -деревья). Эти деревья были впервые предложены Рудольфом Байером (Rudolf Bayer) и Эдом Маккрейтом (Ed McCreight) в 1972 году и всего за несколько лет сменили почти все крупные методы доступа к файлам, кроме хэширования. Эти многоходовые сбалансированные деревья поиска в настоящее время являются стандартом организации файлов для приложений, работающих с диапазоном ключей.


.1 Структура В+-дерева

+-дерево в некоторых аспектах является обобщением дерева двоичного поиска (BST). Главное отличие в том, что узлы B+-дерева имеют много дочерних узлов, а не ограничиваются только двумя. Поскольку нашей целью является минимизировать обращение к диску, то для эффективного поиска записи, нужно сделать высоту многоходового дерева поиска как можно меньше. Эта цель достигается за счет того, что в каждом узле имеется большое количество ветвей.+-дерево порядка b - это такое дерево, в котором каждый внутренний узел содержит от b/2 до b дочерних узлов и, количество ключей в каждом узле (кроме корня) должно быть от b - 1 до 2b - 1. b также известен как коэффициент разветвления или ветвления дерева. На рисунке (Рис.1) представлено B+дерево порядка 4.


.2 Характеристика

+-деревья хранят указатели на реальные записи только на конечных узлах.

Количество ключей в каждом узле (кроме корня) должно быть от b - 1 до 2b - 1, где b - порядок дерева.

Корневой узел либо является листом или имеет не менее двух детей.

Внутренние узлы используются только в качестве заполнителей для «руководства» поиска. Количество ключей в каждом внутреннем узле на единицу меньше, чем число непустых детей. Ключи хранятся в порядке убывания (т.е. отсортированы в лексикографическом порядке).

Конечные узлы в В+-дереве связаны друг с другом, формируя связанный список. Это делается для того, чтобы записи могли быть получены последовательно без повторного доступа к B+-дереву. Это также поддерживает быструю обработку диапазона поисковых записей.


1.3 Утверждение о высоте

дерево поиск высота запись

Утверждение.

Высота B+дерева с n ? 1 ключами и минимальной степенью b ? 2 в худшем случае не превышает logb((n + 1) / 2).

Доказательство.

Обозначим высоту B+дерева через h.

Рассмотрим максимально высокое B+дерево: в корне такого дерева хранится 1 ключ, а в остальных узлах по b - 1 ключу (минимально возможное количество)

На уровне 0 размещен один узел (корень) с 1 ключом

На уровне 1: 2 узла (у каждого по b - 1 ключу)

На уровне 2: 2b узлов

На уровне 3: 2b2 узлов

На уровне h: 2bh-1 узлов

Тогда, общее количество ключей есть:

= 1 + (b - 1)(2 + 2b + 2b2 + 2b3 + ? + 2bh?1) =

= 1 + 2(b - 1)(1 + b + b2 + ? + bh?1)


Сумма h первых членов геометрической прогрессии:

=d1(qh ? 1)/(q - 1)


Следовательно,

= 1 + 2(b - 1) (bh - 1)/(b - 1) = 2b? ? 1+ 1 = 2bh

(n + 1) / 2 = bh= logb((n + 1) / 2)


Утверждение доказано.

2. Основные операции B+дерева


.1 Поиск записи


Для извлечения записей из B+дерева, запросы пишутся с условиями, которые описывают желаемое значение. Поиск в B+-дереве является ступенчатым процессом, начиная с корневого узла:

Бинарный поиск ключа в текущем узле - стоит помнить, что поисковые значения сортируются. Ищем ключ Кi такой, что Кi ? K < Ki1.

Если текущий узел является внутренним, совершается переход на надлежащую ветвь, связанную с ключом Кi и повторяется пункт 1.

Если текущий узел является листом, то:

Если K = Ki, то запись существует в таблице, и мы можем вернуть запись, связанную с Ki

В противном случае, Кi не найден среди ключевых значений на листе, это значит, что в таблице нет ключей с нужным значением.

Вычислительная сложность данной операции в худшем случае TFind = O (logb/2n), где b- порядок дерева или коэффициент ветвления; n - количество элементов в дереве.

Доказательство. Поиск элемента в бинарном сбалансированном дереве имеет трудоёмкость равную O(log2n), основное отличие процесса поиска в B+дереве в том, что внутренний узел может иметь от b/2 до b дочерних узлов (а не ограничивается двумя). Отсюда следует, что в худшем случае вычислительная сложность поиска в B+дереве будет равняться TFind = O (logb/2n).

Пример поиска элемента с ключом равным 3 (Рис.2):



.2 Вставка записи


Процесс добавления записи в B+-дерево аналогичен, как и в других поисковых деревьях: новая запись всегда вставляется в один из конечных узлов. Сложность добавляет то, что вставка может переполнить листовой узел. Когда такие ситуации случаются, в B+-дерево на том же уровне, что и другие конечные узлы, добавляется новый листовой узел. Шаги для вставки в B+-дерева:

Поиск позиции для добавления нового элемента.

Вставка в найденный лист L:

Если L не полон, то запись просто создается.

Если L полон, то в B+-дерево вводится новый листовой узел Lnew, как правый брат L. Ключи в L, вместе с новым элементом, распределяются равномерно среди L и Lnew. Lnew вставляется в связанный список конечных узлов справа от L. Теперь мы должны связать Lnew c деревом при этом Lnew должен быть родным братом для L. Наименьший ключ из Lnew будет скопирован и вставлен в родитель L - который также будет родителем Lnew. Весь этот шаг известен как разделение листового узла.

Если родительский узел P заполнен, то он разделяется в свою очередь. Однако это разделение внутреннего узла немного отличается. Ключи узла Р и новая запись должны быть равномерно распределены. Новой узел должен быть введен в качестве брата Р при этом, средний ключ перемещается выше узла(не копируется!). Это расщепление узлов может продолжаться вверх по дереву до корня.

Когда ключ добавляется в полный корень, то корень расщепляется на два, а средний ключ становится новым корнем. Это единственный способ для B+-дерева расти в высоту.

Вычислительная сложность данной операции в худшем случае TInsert = O (logb/2n), где b - порядок дерева или коэффициент ветвления; n - количество элементов в дереве.

Доказательство. Поиск места для вставки имеет такую же вычислительную сложность как и просто процесс поиска ( O (logb/2n) ). Любой возможный при вставке случай, при котором дерево подвергается изменению, имеет константную трудоёмкость. Следовательно TInsert = O ((logb/2n )+ 1) = O (logb/2n).

Пример вставки элемента с ключом равным 7 (Рис.3 и Рис.4):

Поиск позиции для вставки элемента;

Т.к. найденный лист полон, добавляем в дерево новый конечный узел в виде правого брата листа;

Распределяем записи из найденного узла(+ вставляемый элемент) между двумя конечными элементами дерева;

Ключ первой записи из нового листа копируем в родительский узел.

ДО:


УЗЕЛ ПОЛОН

(Рис.3)


ПОСЛЕ:



.3 Удаление записи


Шаги для удаления элемента из B + -дерева:

Поиск записи, которую необходимо удалить. Этот поиск завершится в листе L.

Если лист L содержит более минимального числа элементов, то запись может быть безопасно удалена, без дальнейших действий.

Если лист содержит минимальное количество записей, то удаляемый элемент заменяется другим, таким при котором сохранится правильный порядок. Чтобы найти такие записи, мы проверяем узлы-братья Lleft и Lright, один из них должен существовать.

Если один из этих конечных узлов имеет более чем минимальное количество записей, то записи передаются от этого брата, так что оба узла будут иметь приблизительно одинаковое количество элементов. Ключи из родительского узла, возможно, должны быть пересмотрены.

Если оба конечных узла Lleft и Lright имеют только минимальное количество записей, то L передает свои элементы одному из братьев и удаляется из дерева. Новый лист будет содержать не более, чем максимальное число разрешенных записей.

Если последние два дочерних узла корня сливаются в один, то этот объединенный узел становится новым корневым и дерево теряет уровень.

Вычислительная сложность данной операции в худшем случае TDelete = O (logb/2n), где b - порядок дерева или коэффициент ветвления; n - количество элементов в дереве.

Доказательство. Поиск удаляемого элемента имеет такую же вычислительную сложность как и просто процесс поиска ( O (logb/2n) ). Любой возможный при удалении случай, при котором дерево подвергается изменению, имеет константную трудоёмкость. Следовательно, TDelete = O ((logb/2n)+ 1) = O (logb/2n).

Пример удаления элемента с ключом равным 7(Рис.5 и Рис.6):

Поиск удаляемого элемента;

Конечный узел, содержащий нужную запись, имеет больше минимального количества элементов, происходит удаление записи;

Свойства дерева не нарушены - перестроек не происходит.

ДО:


(Рис.5)


ПОСЛЕ:


(Рис.6)


.4 Поиск по диапазону

+-деревья являются одними из лучших для работы с некой областью значений.

Процесс работы операции:

Поиск первого элемента из диапазона в дереве

После этого, остальная часть записей может быть найдена при помощи последовательной обработки оставшихся элементов конечного узла. Затем, при необходимости, происходит переход вправо по связанному списку листьев. Алгоритм продолжается до тех пор, пока не найдена запись, имеющая значение большее чем у последнего элемента из диапазона и пока связный список не закончился.

Вычислительная сложность данной операции в худшем случае T(x-y)Find = O ((logb/2n) + m), где b - порядок дерева или коэффициент ветвления; n - количество элементов в дереве; m - длина связанного списка.

Доказательство. Поиск первого элемента из диапазона в дереве имеет трудоёмкость O (logb/2n). Чтобы найти все элементы диапазона, необходимо проходить по конечным узлам до тех пор, пока очередная запись удовлетворяет условиям диапазона или пока записи в дереве не закончатся.

Пример поиска по диапазону от 9 до 14 (Рис.7):


(Рис.7)


3. B+-деревья в системах баз данных


Большинство систем баз данных используют индексы, построенные на той или иной форме B+-дерева из-за его многочисленных преимуществ, в частности его поддержку запросов по диапазону.

Заключение


В результате выполнения работы исследована структура B+-дерева. Изучены её основные операции, доказана их вычислительная сложность.




Список использованных источников


<#"justify">Приложение


(Рис.8)


На рисунке (Рис.8) происходит последовательная вставка элементов в дерево (i n - вставка элемента с ключом равным n; t - операция вывода содержимого B+дерева на экран; знак «|» разделяет узлы между собой).


(Рис.9)


На рисунке (Рис.9) приведён пример вставки и удаления элементов (d n - удаление из дерева элемента с ключом равным n).


(Рис.10)


На рисунке (Рис.10) приведён пример поиска записей из диапазона от 11 до 20.


СОДЕРЖАНИЕ ВВЕДЕНИЕ . Сбалансированные многоходовые деревья поиска .1 В+-дерево, структура .2 Характеристика .3 Утверждение о высоте

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ