Т-дерево

редактировать
Пример Т-дерева.

В информатике Т-дерево - это тип двоичного дерева структуры данных, который используется базами данных в основной памяти, например Datablitz, EXtremeDB, MySQL Cluster, Oracle TimesTen и MobileLite.

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

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

'T' в T-дереве относится к форме структур данных узла в исходной статье, которая впервые описывала этот тип индекса.

Содержание
  • 1 Структуры узлов
  • 2 Алгоритмы
    • 2.1 Поиск
    • 2.2 Вставка
    • 2.3 Удаление
    • 2.4 Вращение и балансировка
  • 3 Производительность и хранение
  • 4 См. Также
    • 4.1 Другие деревья
  • 5 Ссылки
  • 6 Внешние ссылки
Структуры узлов

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

Связанные значения.

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

Алгоритмы

Поиск

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

Вставка

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

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

Удаление

  • Поиск ограничивающего узла значения, которое нужно удалить. Если ограничивающий узел не найден, то закончить.
  • Если ограничивающий узел не содержит значения, то закончить.
  • удалить значение из массива данных узла

Теперь мы должны различать по тип узла:

  • Внутренний узел:

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

  • Конечный узел:

Если это был единственный элемент в массиве данных, удалите узел. При необходимости измените баланс дерева.

  • Половина листового узла:

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

Вращение и балансировка

T-дерево реализовано поверх базового самобалансирующегося двоичного дерева поиска. В частности, статья Лемана и Кэри описывает T-дерево, сбалансированное как AVL-дерево : оно выходит из равновесия, когда дочерние деревья узла различаются по высоте как минимум на два уровня. Это может произойти после вставки или удаления узла. После вставки или удаления дерево просматривается от листа до корня. При обнаружении дисбаланса выполняется одно вращение дерева или пара вращений, что гарантированно уравновешивает все дерево.

Когда вращение приводит к тому, что внутренний узел имеет меньше минимального количества элементов, элементы из нового дочернего (ren) узла перемещаются во внутренний узел.

Производительность и хранилище

Хотя T-деревья когда-то широко использовались для баз данных в основной памяти из-за повышения производительности, последние тенденции для очень больших баз данных в основной памяти делают больший акцент на стоимости выделения ресурсов. В современных системах баз данных NOSQL, часто хранящих триллионы записей, стоимость памяти для хранения даже одного индекса, включающего фактические значения, может превышать десятки или даже сотни терабайт.

См. Также

Другие деревья

Ссылки
  1. ^Lehman, Tobin J.; Carey, Michael J. (25–28 августа 1986 г.). Исследование структур индексов для систем управления базами данных с основной памятью. Двенадцатая Международная конференция по очень большим базам данных (VLDB 1986). Киото. ISBN 0-934613-18-4.
Внешние ссылки
Последняя правка сделана 2021-06-09 05:09:34
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте