Які відмінності між B деревами та B + деревами?


293

У b-дереві ви можете зберігати як ключі, так і дані у внутрішніх та листкових вузлах , але у дереві b + ви повинні зберігати дані лише у вузлах листків .

Чи є якась перевага робити вищезазначене на b + дереві?

Чому б не використовувати b-дерева замість b + дерев скрізь, оскільки інтуїтивно вони здаються набагато швидшими?

Я маю на увазі, для чого потрібно копіювати ключ (дані) у b + дереві?


37
Я думаю, що вони говорять: "B-Tree" проти B + -Tree. Вони означають дефіс, а не знак мінуса.
Ст

Відповіді:


421

Зображення нижче допомагає показати відмінності між B + деревами та B деревами.

Переваги дерев B +:

  • Оскільки дерева B + не мають даних, пов'язаних із внутрішніми вузлами, на сторінці пам'яті може розміститися більше клавіш. Отже, для отримання доступу до даних, що знаходяться на вузлі аркуша, знадобиться менше помилок кешу.
  • Листові вузли дерев B + пов'язані між собою, тому для повного сканування всіх об'єктів на дереві потрібно лише один лінійний прохід через усі листові вузли. З іншого боку, дерево AB вимагає переходу кожного рівня в дерево. Цей повний обхід дерева, ймовірно, матиме більше пропусків кешу, ніж лінійний обхід листя B +.

Перевага B дерев:

  • Оскільки B дерева містять дані з кожним ключем, часто доступні вузли можуть лежати ближче до кореня, а отже, до них можна отримати швидший доступ.

B і B + дерево


2
Чи обмежується їхня кількість записів у вузлі аркуша ??
TLE

38
@TLE Добре запитання! Так. Жорсткий диск одночасно отримує мінімум сторінки пам'яті, тому ми хочемо розмістити всі покажчики на одній сторінці пам'яті. Ми хочемо вимагати лише одного читання диска на доступ до аркуша, тому ми не хочемо присвоювати аркушу більше, ніж розмір сторінки вказівників. Якщо ми заповнюємо аркуш розміром сторінки вказівників, а потім хочемо додати ще один покажчик до цього аркуша, ми створюємо двох дітей цього вузла і даємо половину вказівників листа кожній новій дитині. Звичайно, можуть бути деякі перестановки, щоб забезпечити мінімальну висоту дерева. Чи допомагає це?
Роза Перроне

останній покажчик кожного вузла листя B-дерева повинен вказувати на наступний вузол листя, правда?
camino

8
Тож шкода, що натрапив на таку стару нитку, але коментар @ Babyburger про те, як коментар camino був правильним, насправді не відповідає дійсності; a B-Дерево насправді не має з'єднаних листових вузлів. A B +, звичайно.
Джейсон

Дякую за відмінну відповідь, що таке корисний випадок, коли в B / B + дереві в контексті бази даних буде потрібно повне сканування об'єктів? Оскільки він в основному використовується для індексації, для пошуку майже не потрібно буде сканувати все дерево правильно, а замість цього пройти шлях індексу, чи правильно це?
Сіддхартха

113

Основна перевага дерев B + над деревами B полягає в тому, що вони дозволяють збирати більше покажчиків на інші вузли, видаляючи покажчики до даних, збільшуючи таким чином показник та потенційно зменшуючи глибину дерева.

Недоліком є ​​те, що не існує ранніх аутів, коли, можливо, ви знайшли відповідність у внутрішньому вузлі. Але оскільки обидві структури даних мають величезну кількість шансів, переважна більшість ваших збігів все одно будуть знаходитись у вузлах листя, що робить в середньому дерево B + більш ефективним.


1
Я вважаю за краще відповідь Джеффа, оскільки він підкреслює різницю в ефективності при повному скануванні.
Роза Перроне

Я дуже плутаюсь, тому що, пройшовши b-дерево за допомогою переходу в порядку, буде прочитано всі значення в упорядкованому порядку за O (n) час. Якщо кожен вузол дерева має оптимальний розмір для фізичного розміру сторінки, схоже, що речі не стають більш оптимальними. І навпаки, вартість дістатися до першого (найменшого) значення в b + дереві - це O (log n), а потім пройти через кожен лист - O (n), тому загальна вартість - O (log n + n). Це більше роботи і більше читання диска, що має сенс, оскільки дерево має всі ці додаткові дані в ньому. Я не розумію.
Ерік

Що було б іншим словом для 'fanout' у наведеному реченні?
Хорхе Букаран

3
@JorgeBucaran fanout = кількість країв, що виходять із вузла
bantmen

33

Дерева B + набагато простіше і вище виконувати повне сканування, як і при перегляді кожного фрагмента даних, який індексує дерево, оскільки кінцеві вузли утворюють пов'язаний список. Щоб зробити повне сканування за допомогою дерева B, вам потрібно зробити повний обхід дерева, щоб знайти всі дані.

B-Дерева, з іншого боку, може бути швидше, коли ви шукаєте (шукаючи конкретний фрагмент даних за ключем), особливо коли дерево знаходиться в ОЗУ або іншому неблоковому сховищі. Оскільки ви можете підняти часто використовувані вузли на дереві, для порівняння потрібне менше порівнянь.


1
Чи погоджуєтесь ви, тоді дерево B + буде використовуватися для ситуацій, коли може бути послідовне зчитування всіх даних, таким чином, можливість переходити через листя. Тоді як дерево B ідеально підходить для випадкових випадків доступу?
JDPeckham

31
  1. У дереві B клавіші пошуку та дані зберігаються у внутрішніх чи листкових вузлах. Але в B + -триші дані зберігаються лише у листкових вузлах.
  2. Повний сканування дерева B + дуже простий, оскільки всі дані знаходяться у вузлах листя. Повне сканування дерева B вимагає повного обходу.
  3. У дереві B дані можуть бути знайдені у вузлах листя або внутрішніх вузлах. Видалення внутрішніх вузлів дуже складне. У дереві B + дані знаходяться лише у листкових вузлах. Видалення вузлів листя легко.
  4. Вставка в B дерево складніше, ніж B + дерево.
  5. B + дерева зберігають зайві ключі пошуку, але дерево B не має зайвого значення.
  6. У дереві B + дані вузла листів упорядковуються як послідовний зв'язаний список, але у дереві B вузол листя не може зберігатися за допомогою пов'язаного списку. Багато реалізацій систем баз даних віддають перевагу структурній простоті дерева B +.

15

Приклад із концепцій системи баз даних 5-е

B + -річко B + дерево

відповідне В-дерево Btree


5
Я не думаю, що B-Tree має посилання на дітей вузла. Наприклад, сформуйте Clearview bucketдо Mianus Bucket. Інакше це не має сенсу робити, тому що між двома ви маєте те, Downtown bucketщо потрібно шукати в тому випадку, якщо ви хочете зробити індексне сканування на B-дереві (вимагає зворотного відстеження). Де ти це взяв?
Еван Керролл

1
Концепції системи @EvanCarroll Система баз даних 5-е, можливо, вам потрібно підтвердити з автором :)
camino

11

Визначте "набагато швидше". Асимптотично вони приблизно однакові. Відмінності полягають у тому, як вони використовують вторинне сховище. Статті у Вікіпедії про B-дерева та B + дерева виглядають досить надійними.


2
Я згоден з Чарлі. Оскільки один вузол дерева B являє собою одну вторинну сторінку пам'яті або блок, перехід від одного вузла до іншого вимагає трудомісткої зміни сторінки.

11

Адегока А, Аміт

Я думаю, що одним із важливих моментів, яких вам не вистачає, є різниця між даними та покажчиками, як це пояснено в цьому розділі.

Вказівник: вказівник на інші вузли.

Дані: - У контексті індексів баз даних, це лише інший вказівник на реальні дані (рядок), які знаходяться десь в іншому місці.

Отже, у випадку дерева B кожен вузол має три інформаційні ключі, вказівники на дані, пов’язані з ключами, та вказівник на дочірні вузли.

У внутрішньому вузлі дерева B зберігайте ключі та вказівники на дочірній вузол, тоді як вузол листя зберігає ключі та покажчики на пов’язані дані. Це дозволяє отримати більше клавіш для заданого розміру вузла. Розмір вузла визначається переважно розміром блоку.

Перевага наявності більшої кількості ключів на вузол пояснюється вище, тому я заощаджую свої зусилля для введення тексту.


10

B + Дерева особливо хороші в блоковому зберіганні (наприклад: жорсткий диск). маючи на увазі, ви отримуєте кілька переваг, наприклад (зверху голови):

  • висока вентиляція / мала глибина: це означає, що вам потрібно отримати менше блоків, щоб дістатися до даних. з даними, переплетеними з покажчиками, кожне зчитування отримує менше покажчиків, тому вам потрібно більше шукати, щоб дістатися до даних

  • просте і послідовне блокове зберігання: внутрішній вузол має N покажчиків, нічого іншого, вузол аркуша має дані, нічого іншого. що дозволяє легко розбирати, налагоджувати та навіть реконструювати.

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


2
здебільшого для дерев пам’яті; але є й інші популярні варіанти, такі як червоно-чорні дерева, пропуск списків тощо.
Хав'єр

B-дерева також розроблені для ефективного блокового зберігання, обмежуючи асимптотичну кількість доступу до вузлів. В іншому випадку, якщо використовувати носій пам’яті схожий на пам'ять із випадковим доступом, можна використовувати самоврівноважуване бінарне дерево, наприклад, червоно-чорне дерево для досягнення кращих результатів.
dioyziz

не повинен ваш перший пункт говорити "менше шукає", а не "більше шукає". Менша глибина -> менше шукає
Джессі

1
@Jesse: висока fanout => низька глибина => менше шукає, але змішування даних і покажчиків означає менше покажчиків => низька вентиляція => більше глибина => більше прагне
Хав'єр

1
@AdegokeA: дерево B + має два типи вузлів: внутрішні вузли із лише клавішами та покажчиками, даних немає; і вузол листя, з даними та без покажчиків. що дозволяє отримати максимальну кількість клавіш на кожному внутрішньому вузлі. якщо ви зберігаєте дані на внутрішньому вузлі, то ви можете помістити менше покажчиків і ваше дерево стає вище.
Хав'єр

5

У B + Tree, оскільки у внутрішніх вузлах зберігаються лише покажчики, їх розмір стає значно меншим, ніж внутрішні вузли дерева B (які зберігають обидва дані + ключ). Отже, індекси дерева B + можуть бути отримані із зовнішнього сховища в одному зчитуваному диску, обробленому для пошуку місця розташування цілі. Якщо це дерево B, для кожного процесу прийняття рішення потрібно зчитувати диск. Сподіваюся, я зрозумів свою думку! :)


4

**

Основним недоліком 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+difficffic+of+Traversing+the+keys+sequentially&source=bl&ots=pGcPQSEJMS&sig= F9MY7zEXYAMVKl_Sg4W-0LTRor8 & hl = en & sa = X & ei = nD5AUbeeH4zwrQe12oCYAQ & ved = 0CDsQ6AEwAg # v = onepage & q = недолік% 20of% 20B-Дерево% 20%% 20%% 20%% 20% 20%


1
Це мала бути правильною відповіддю. Коротше кажучи: Місцевість відліку.
Теодор Зографос

2

Візьмемо один приклад - у вас є таблиця з величезними даними в рядку. Це означає, що кожен екземпляр об'єкта великий.

Якщо ви використовуєте тут дерево B, то більшість часу витрачається на сканування сторінок з даними - що не приносить користі. У базах даних це причина використання дерев B +, щоб уникнути сканування даних об’єктів.

B + Дерева відокремлюють ключі від даних.

Але якщо розмір ваших даних менший, то ви можете зберігати їх за допомогою ключа, яким займається дерево B.


1
"Якщо ви використовуєте тут B-дерево, то більшість часу витрачається на сканування сторінок з даними" - не потрібно. Вузли B-дерева можуть зберігати лише "вказівники" на дані на диску, а не самі дані.
TT_

2

Основна відмінність B-дерева від дерева B + полягає в тому, що B-дерево усуває зайве зберігання значень пошукових ключів. Шукаючі ключі не повторюються у B-дереві, можливо, нам не вдасться зберегти індекс за допомогою меншої кількості деревних вузлів ніж у відповідному індексі дерева B +. Однак, оскільки ключ пошуку, який з’являється у нелистових вузлах, не з’являється більше ніде в B-дереві, ми змушені включати додаткове поле вказівника для кожного пошукового ключа у нелистовий вузол. Вони є космічними перевагами для B-дерева, оскільки повторення не відбувається і може використовуватися для великих індексів.


1
Цікаво, що думки про повторення є унікальними серед відповідей тут і мають більше сенсу, ніж обробка порядку деревом b + є більш ефективною, ніж обхід b-дерева в порядку. Наскільки я можу сказати, це або не зовсім правильно, або не вся історія, так як для обходу b-дерева є O (n), а пошук найменшого вузла в b + дереві - O (log n), а потім перехід кожного аркуша є O (n) на додаток до цього. Однак якщо ви індексували щось з невеликим діапазоном значень, як булеве поле, дерево b + має набагато більше сенсу, ніж b-дерево через його дублювання обробки.
Ерік

1

Дерево B + - це збалансоване дерево, у якому кожен шлях від кореня дерева до листя має однакову довжину, і кожен нелінійний вузол дерева має між [n / 2] та [n] дітьми, де n закріплений за конкретним деревом. Він містить покажчики та сторінки даних. Бінарні дерева мають лише двох дітей на батьківський вузол, B + дерева можуть мати змінну кількість дітей для кожного батьківського вузла


1
Тільки для наочності дерева B - це не бінарні дерева. Насправді дерева B і дерева B + ближче одне до одного в будівництві та використанні, ніж двійкові дерева. Статті у вікі можуть допомогти у очищенні визначень - B + Дерево , B Дерево та Бінарне дерево
uutsav

1

Одне можливе використання дерев B + - це те, що воно підходить для ситуацій, коли дерево росте настільки великим, що не вміщується у наявну пам'ять. Таким чином, ви, як правило, розраховуєте зробити кілька вводу-виводу.
Часто трапляється, що дерево B + використовується навіть тоді, коли воно насправді вписується в пам'ять, і тоді ваш кеш-менеджер може постійно його зберігати. Але це особливий випадок, а не загальний, і кешування політики - це окремий від технічного обслуговування дерева B + як такого.

Також у дереві B + сторінки сторінки пов’язані між собою у зв'язаному списку (або у подвійному зв’язку), що оптимізує обхід (для пошуку в діапазоні, сортування тощо). Отже, кількість покажчиків - це функція конкретного алгоритму, який використовується.


Це відповідає на питання, чому ми не повинні використовувати B-дерева замість B + дерев скрізь :)
програміст стеків

3
Але ви описали лише одну сторону, наскільки ми знаємо, з вашою відповіддю b-дерева можуть функціонувати точно так само. ОП попросила пояснити відмінності, і ви говорили лише про одне, а не про інше. Ви не можете мати діаграму venn з одним колом!
Мальфіст
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.