Резюме
Во время интервью, когда мы обменивались вопросами об индексе mysql, я обнаружил, что некоторые люди могут отличить дерево B+ от дерева B, сбалансированного двоичного дерева, но не могут отличить дерево B+ от хэш-индекса. На первый взгляд известно, что это заучивание наизусть, без понимания природы индекса. Эта статья направлена на анализ принципа, лежащего в основе этого, добро пожаловать, чтобы оставить сообщение для обсуждения
проблема
Если вы запутались или немного понимаете следующие вопросы, пожалуйста, продолжайте читать, я уверен, что эта статья определенно вам поможет.
- Как реализован индекс mysql
- В чем разница между структурой индекса mysql B+ и хешем. К какому сценарию относится?
- Существуют ли другие реализации индексации базы данных?
- Как реализована таблица переходов Redis
- В чем разница между таблицей переходов и деревом B+ и деревом LSM?
Разобрать
Прежде всего, почему индекс mysql и таблица переходов redis должны обсуждаться вместе, ведь они решают одну и ту же задачу и используются дляРешить задачу поиска наборов данных, то есть по заданному ключу быстро найти его расположение (или соответствующее значение)
Когда вы думаете о проблеме с этой точки зрения, знаете ли вы разницу между индексом дерева B+ и хэш-индексом?
Поиск проблем в наборах данных
Теперь мы четко разделили границу предметной области, которая должна решать задачу нахождения набора данных. Какие вопросы необходимо рассмотреть в этом
- Какие методы поиска необходимо поддерживать, одноключевой/многоключевой/диапазонный поиск,
- Вставить/удалить эффективность
- Эффективность поиска (т.е. временная сложность)
- Размер хранилища (сложность пространства)
Давайте рассмотрим несколько часто используемых поисковых структур.
hash
Дерево B+ — это, прежде всего, упорядоченная структура.Чтобы высота дерева не была слишком большой и не влияла на эффективность поиска, листовой узел хранит не отдельные данные, а страницу данных, что повышает эффективность поиска. , а для лучшей поддержки запросов диапазона, избыточных данных B+ дерева неконечных узлов в конечных узлах, чтобы поддерживать перелистывание страниц, конечные узлы соединены указателями.
пропустить стол
Суммировать
| структура данных | Принцип реализации | ключевой метод запроса | Найдите эффективность | размер хранилища | Эффективность вставки и удаления |
|---|---|---|---|---|---|
| Hash | хеш-таблица | Поддержка одного ключа | близко к O (1) | Небольшой, нет дополнительного хранилища, кроме данных | O(1) |
| В+ дерево | Сбалансированное бинарное дерево расширено | Один ключ, диапазон, нумерация страниц | O(Log(n) | В дополнение к данным есть левый и правый указатели, а также указатели конечных узлов. | O(Log(n), структуру дерева нужно скорректировать, алгоритм усложняется |
| пропустить стол | расширение упорядоченного связанного списка | один ключ, пагинация | O(Log(n) | В дополнение к данным указателей больше, но указатель каждого узла меньше | O (Log (n), работающий только со связанными списками, алгоритм относительно прост |
Если вас интересует структура LSM, вы можете посмотреть на неекассандра против монго (1) механизм хранения
Полезный лайк, спасибо