Различия между деревьями B и деревьями B +
В b-дереве вы можете хранить как ключи, так и данные во внутреннем и листовом узлах, но в b + tree вы должны хранить данные в листе только узлы.
Есть ли какое-либо преимущество в том, что вы делаете это в дереве b +?
Почему бы не использовать b-деревья вместо b + деревьев везде, так как интуитивно они кажутся намного быстрее?
Я хочу сказать, зачем вам реплицировать ключ (данные) в дереве b +?
Ответы
Ответ 1
Ниже показано изображение различий между деревьями B + и деревьями B.
Преимущества деревьев B +:
- Поскольку деревья B + не имеют данных, связанных с внутренними узлами, большее количество ключей может помещаться на страницу памяти. Поэтому для доступа к данным, расположенным на листе node, потребуется меньшее количество промахов в кеше.
- Листовые узлы деревьев B + связаны между собой, поэтому для полного сканирования всех объектов в дереве требуется только один линейный проход по всем листовым узлам. С другой стороны, дерево B потребует обхода каждого уровня в дереве. Этот обход всего дерева, вероятно, будет включать больше промахов в кеше, чем линейный обход листьев B +.
Преимущество деревьев B:
- Поскольку деревья B содержат данные с каждым ключом, часто доступные узлы могут располагаться ближе к корню, и поэтому их можно получить быстрее.
![B and B+ tree]()
Ответ 2
Основным преимуществом деревьев B + над деревьями B является то, что они позволяют упаковывать больше указателей на другие узлы, удаляя указатели на данные, тем самым увеличивая разветвление и потенциально уменьшая глубину дерева.
Недостаток заключается в том, что ранних аутов нет, если вы нашли совпадение во внутреннем node. Но поскольку обе структуры данных имеют огромные разветвления, подавляющее большинство ваших совпадений в любом случае будет на листовых узлах, что сделает в среднем дерево B + более эффективным.
Ответ 3
B + Деревья намного проще и эффективнее выполнять полное сканирование, так как при просмотре каждой части данных индексы дерева, так как терминальные узлы образуют связанный список. Чтобы выполнить полное сканирование с помощью B-Tree, вам нужно выполнить полный обход дерева, чтобы найти все данные.
B-деревья, с другой стороны, могут быть быстрее, когда вы ищете (ищет конкретную часть данных по ключу), особенно когда дерево находится в ОЗУ или другом неблокированном хранилище. Поскольку вы можете поднимать обычно используемые узлы в дереве, для получения данных требуется меньшее количество сравнений.
Ответ 4
- В ключах поиска дерева B и данных, хранящихся во внутренних или листовых узлах. Но в B + -tree хранятся только узлы листа.
- Поиск любых данных в дереве B + очень просто, потому что все данные находятся в листовых узлах. В дереве B данные не могут быть найдены в листовых узлах.
- В дереве B данные могут быть найдены в листовых узлах или внутренних узлах. Удаление внутренних узлов очень сложно. В дереве B + данные встречаются только в листовых узлах. Удаление листовых узлов легко.
- Вставка в дерево B более сложна, чем дерево B +.
- B + деревья хранят избыточный ключ поиска, но дерево B не имеет избыточного значения.
- В дереве B + данные листовых узлов упорядочены как последовательный связанный список, но в дереве B лист node не может быть сохранен с помощью связанного списка. Многие реализации систем баз данных предпочитают структурную простоту дерева B +.
Ответ 5
Определите "намного быстрее". Асимптотически они примерно одинаковы. Различия заключаются в том, как они используют вторичное хранилище. Статьи Википедии о B-деревья и B + trees look довольно надежный.
Ответ 6
Пример из концепций системы баз данных 5th
В + -tree
![B+tree]()
соответствующее B-дерево
![Btree]()
Ответ 7
Adegoke A, Amit
Я думаю, что один важный момент, который вам не хватает, - это разница между данными и указателями, как описано в этом разделе.
Указатель: указатель на другие узлы.
Данные: - В контексте индексов базы данных данные являются еще одним указателем на реальные данные (строки), которые находятся где-то в другом месте.
Следовательно, в случае дерева B каждый node имеет три информационных ключа, указатели на данные, связанные с ключами, и указатель на дочерние узлы.
В дереве B + дерева node сохраняйте ключи и указатели на дочерние node, а листья node сохраняют ключи и указатели на связанные данные. Это позволяет увеличить количество ключей для заданного размера node. Размер node определяется в основном размером блока.
Преимущество наличия большего количества ключей для node объясняется значительно выше, поэтому я сохраню свое усилие ввода.
Ответ 8
B + Деревья особенно хороши в блочном хранилище (например, жесткий диск). имея в виду это, вы получаете несколько преимуществ, например (от верхней части головы):
-
высокий уровень разветвления/низкая глубина: это означает, что вам нужно получить меньше блоков, чтобы добраться до данных. с данными, смешавшимися с указателями, каждое чтение получает меньше указателей, поэтому вам нужно больше искать, чтобы добраться до данных.
-
простое и последовательное хранение блоков: внутренний node имеет N указателей, ничего больше, у листа node есть данные, ничего больше. что позволяет легко анализировать, отлаживать и даже восстанавливать.
-
высокая плотность ключа означает, что верхние узлы почти наверняка находятся в кеше, во многих случаях все внутренние узлы быстро кэшируются, поэтому доступ к данным должен только на диск.
Ответ 9
В B + Tree, поскольку во внутренних узлах хранятся только указатели, их размер становится значительно меньше, чем внутренние узлы дерева B (которые хранят как ключ данных +).
Следовательно, индексы дерева B + могут быть извлечены из внешней памяти на одном диске, прочитанном, обработанном, чтобы найти местоположение цели. Если это было дерево B, чтение диска требуется для каждого процесса принятия решений. Надеюсь, я ясно дал понять!:)
Ответ 10
Основное различие между деревом B и деревом B + состоит в том, что B-дерево исключает избыточное хранение значений ключа поиска. Поскольку ключи поиска не повторяются в B-дереве, мы не сможем хранить индекс, используя меньше, чем в соответствующем индексе дерева B+. Однако, поскольку ключ поиска, который появляется в нелистовых узлах, больше нигде не отображается в B-дереве, мы вынуждены включать дополнительное поле указателя для каждого ключа поиска в не-лист node.
Это пространственные преимущества для B-дерева, поскольку повторение не происходит и может использоваться для больших индексов.
Ответ 11
**
Основным недостатком B-Tree является трудность перемещения ключей последовательно. Дерево B + сохраняет свойство быстрого произвольного доступа B-Tree, а также обеспечивает быстрый последовательный доступ
**
ref: Структуры данных с использованием C//Автор: Aaro M Tenenbaum
http://books.google.co.in/books?id=X0Cd1Pr2W0gC&pg=PA456&lpg=PA456&dq=drawback+of+B-Tree+is+the+difficulty+of+Traversing+the+keys+sequentially&source=bl&ots=pGcPQSEJMS&sig=F9MY7zEXYAMVKl_Sg4W-0LTRor8&hl=en&sa=X&ei=nD5AUbeeH4zwrQe12oCYAQ&ved=0CDsQ6AEwAg#v=onepage&q=drawback%20of%20B-Tree%20is%20the%20difficulty%20of%20Traversing%20the%20keys%20sequentially&f=false
Ответ 12
Дерево B + - это сбалансированное дерево, в котором каждый путь от корня дерева до листа имеет одинаковую длину, и каждый нелеистый node дерева имеет между [n/2] и [n] дети, где n фиксировано для определенного дерева. Он содержит индексные страницы и страницы данных.
Двоичные деревья имеют только два родителя на родителя node, деревья B + могут иметь переменное число детей для каждого родителя node
Ответ 13
Возьмем один пример - у вас есть таблица с огромными данными в строке. Это означает, что каждый экземпляр объекта Big.
Если вы используете B-дерево здесь, большую часть времени тратится на сканирование страниц с данными - это бесполезно. В базах данных, которые являются причиной использования деревьев B +, чтобы избежать сканирования данных объекта.
B + Деревья разделяют ключи от данных.
Но если ваш размер данных меньше, вы можете сохранить их с помощью ключа, который является тем, что делает дерево B.
Ответ 14
Одним из возможных вариантов использования B + tress является то, что он подходит для ситуаций
где дерево растет настолько большим, что оно не должно
Память. Таким образом, вы обычно ожидаете, что будете делать несколько операций ввода-вывода. Часто
случается, что дерево B + используется, даже если оно действительно вписывается в
памяти, а затем ваш менеджер кэша может постоянно его хранить. Но
это особый случай, а не общий, а политика кэширования - это
отдельно от обслуживания дерева B + как такового.
Кроме того, в дереве B + страницы листа связаны в
связанный список (или двусвязный список), который оптимизирует обходы
(для поиска диапазона, сортировки и т.д.). Таким образом, количество указателей
функция используемого конкретного алгоритма.