Введение
Дерево с множественным корнем. B+ дерево — это m-арное дерево с переменным, но часто большим числом дочерних элементов на узел. B+ дерево состоит из корня, внутренних узлов и листьев. Корень может быть как листом, так и узлом с двумя или более дочерними элементами. B+ дерево можно рассматривать как B-дерево, в котором каждый узел содержит только ключи (а не пары ключ-значение), и к которому добавлен дополнительный уровень внизу со связанными листьями. Основное преимущество B+ дерева заключается в хранении данных для эффективного поиска в контексте блочно-ориентированного хранения, в частности, файловых систем. Это обусловлено главным образом тем, что, в отличие от бинарных деревьев поиска, B+ деревья обладают очень высокой ветвистостью (числом указателей на дочерние узлы в узле).
A B+ tree is an m ary tree with a variable but often large number of children per node. A B+ tree consists of a root, internal nodes and leaves. The root may be either a leaf or a node with two or more children. A B+ tree can be viewed as a B tree in which each node contains only keys (not key–value pairs), and to which an additional level is added at the bottom with linked leaves. The primary value of a B+ tree is in storing data for efficient retrieval in a block oriented storage context — in particular, filesystems. This is primarily because unlike binary search trees, B+ trees have very high fanout (number of pointers to child nodes in a node,
Интервалы в внутренних узлах
По определению, каждое значение, содержащееся в B+ дереве, является ключом, который содержится ровно в одном листе. Каждый ключ должен быть непосредственно сопоставим с любым другим ключом, что формирует полный порядок. Это позволяет каждому листу поддерживать свои ключи отсортированными в любой момент времени, а каждому внутреннему узлу – создавать упорядоченную коллекцию интервалов, представляющих непрерывный диапазон значений, содержащихся в данном листе. Внутренние узлы, расположенные выше в дереве, могут создавать собственные интервалы, рекурсивно агрегируя интервалы, содержащиеся в их дочерних внутренних узлах. В конечном итоге, корень B+ дерева представляет весь диапазон значений в дереве, при этом каждый внутренний узел представляет собой подинтервал. Для сохранения этой рекурсивной информации об интервалах, внутренние узлы должны дополнительно содержать копии ключей, представляющих наименьший элемент в интервале, охватываемом дочерним узлом с индексом i (который сам может быть внутренним узлом или листом). Где m обозначает фактическое количество дочерних узлов для данного внутреннего узла.
Реализация
Листья (самые нижние индексные блоки) B+ дерева часто связаны друг с другом в виде связного списка; это упрощает и повышает эффективность запросов по диапазону или (упорядоченной) итерации по блокам (хотя указанный выше предел может быть достигнут и без этого дополнения). Это не приводит к значительному увеличению потребления памяти или затрат на обслуживание дерева. Это иллюстрирует одно из существенных преимуществ B+ дерева перед B-деревом; в B-дереве, поскольку не все ключи содержатся в листьях, построить такой упорядоченный связный список невозможно. Таким образом, B+ дерево особенно полезно в качестве индекса в системах управления базами данных, где данные обычно хранятся на диске, поскольку оно позволяет B+ дереву фактически предоставлять эффективную структуру для хранения самих данных (это описано в том, как APFS использует B+ деревья для хранения соответствий между идентификаторами объектов файловой системы и их местоположением на диске, а также для хранения записей файловой системы (включая каталоги), хотя у листовых узлов этих деревьев отсутствуют указатели на соседние узлы).
Системы баз данных
Системы управления реляционными базами данных, такие как IBM Db2 и Informix, поддерживают этот тип дерева для табличных индексов, хотя каждая из этих систем реализует базовую структуру B+ дерева с различными вариациями и расширениями. Многие NoSQL системы управления базами данных, такие как CouchDB и Tokyo Cabinet, также поддерживают этот тип дерева для доступа к данным и их хранения. Поиск объектов в многомерной базе данных, сопоставимых с заданным объектом запроса, является одной из наиболее часто используемых, но при этом ресурсоемких операций в таких системах. В таких случаях поиск ближайшего соседа с использованием B+ дерева оказывается эффективным.
iДистанция
B+ дерево эффективно используется для построения индексированного метода поиска под названием iDistance. iDistance осуществляет поиск k ближайших соседей (kNN) в высокомерных метрических пространствах. Данные в этих пространствах разделяются на основе пространственных или партиционных стратегий, и каждый раздел имеет индексное значение, близкое к представителю этого раздела. Это позволяет эффективно реализовать хранение точек с использованием B+ дерева, сводя запросы к поиску в одномерных диапазонах. Иными словами, техника iDistance можно рассматривать как способ ускорения последовательного просмотра данных. Вместо просмотра записей от начала до конца файла данных, iDistance начинает просмотр с областей, где ближайшие соседи могут быть найдены на ранних этапах с высокой вероятностью.
NVRAM
Нелетучая энергонезависимая память (NVRAM) использует B+-дерево в качестве основного метода доступа к памяти в системах Интернета вещей (IoT) благодаря низкому статическому потреблению энергии и высокой надежности ячеек памяти. B+-дерево эффективно управляет потоком данных к памяти. Кроме того, благодаря продвинутым стратегиям, основанным на частоте обращения к наиболее используемым листьям или опорным точкам, B+-дерево демонстрирует значительные результаты в увеличении срока службы систем баз данных.