Кто-нибудь знает, почему MongoDB использует B-Tree, а не B+-Tree?
Насколько я знаю, большинство СУБД используют B+-Tree. Есть ли какая-то особая причина для MongoDB использовать B-Tree?
Благодарю.
Кто-нибудь знает, почему MongoDB использует B-Tree, а не B+-Tree?
Насколько я знаю, большинство СУБД используют B+-Tree. Есть ли какая-то особая причина для MongoDB использовать B-Tree?
Благодарю.
Вопрос смутил меня, когда я выучил B/B+. Теперь я получил несколько ответов:
select * from xx where id > 23
). Так что преимущества дерева B+ неочевидны.На мой взгляд, это зависит от деталей реализации mongo. Но я не разработчик Mongo. :D
MongoDB использует механизм хранения B+ от WiredTiger по умолчанию.
1、https://docs.mongodb.com/manual/core/wiredtiger/
Начиная с MongoDB 3.2 механизм хранения WiredTiger является механизмом хранения по умолчанию.
2、http://source.wiredtiger.com/3.2.1/tune_page_size_and_comp.html
WiredTiger поддерживает данные таблицы в памяти, используя структуру данных, называемую B-Tree (B+ Tree, если быть точным), обращаясь к узлам B-Tree как к страницам. Внутренние страницы содержат только ключи. Конечные страницы хранят как ключи, так и значения.
Насколько я понимаю, MongoDB хранит индексы как часть тех же файлов, в которых хранятся данные. Так что B Tree лучше! Дерево B+ хранит данные только в листьях.