Как работают реляционные базы данных под капотом?
Мне всегда было интересно, как вы можете бросить некоторый SQL в базе данных, и он почти мгновенно возвращает ваши результаты упорядоченным образом, не думая об этом, как о чем-либо, кроме черного ящика.
Что действительно происходит?
Я уверен, что это имеет какое-то отношение к тому, как значения регулярно выкладываются в памяти, подобно массиву; но помимо этого, я не знаю многого другого.
Как SQL обрабатывается таким образом, чтобы облегчить все это?
Ответы
Ответ 1
Двигатель строит такой план запросов.
Это набор алгоритмов, используемых для возврата наборов, которые вы описали логически с помощью запроса SQL
.
Почти каждый движок позволяет вам увидеть, какой план запроса будет создан для определенного запроса.
-
В MySQL
и PostgreSQL
вы добавляете свой запрос со словом EXPLAIN
-
В SQL Server
вы запускаете SET SHOWPLAN_TEXT ON
перед запуском запроса или просто нажмите Ctrl-L
в Studio Management Studio
-
В Oracle
вы добавили запрос с помощью EXPLAIN PLAN FOR
, а затем выпустили SELECT * FROM (dbms_xplan.display)
Вы можете найти эту статью в своем блоге:
в котором рассматривается тот же вопрос.
Ответ 2
В базовом смысле для многих СУБД:
a) Этап анализа синтаксиса принимает входные данные от настройки сервера (сокеты, что угодно) и превращает этот SQL в действительную AST или другую промежуточную форму.
b) Затем он передает эту информацию в механизм хранения, который превращает это описание запроса в набор поисков по индексам, таблицам, разделам, реплицированным данным и другим элементам, которые составляют семантику хранения схемы
c) Затем движок возвращает набор данных, который затем предоставляется клиенту в любой форме (XML, CSV, конкретный клиент).
Но нет одного истинного ответа. Вы найдете сходства в алгоритмах индексирования, алгоритмах распределения, кешировании, блокировке и других вещах... но главное сходство - это языковой интерфейс самого языка SQL. Кроме того, они могут быть реализованы любым способом, который они хотят... обеспечивая их результаты в соответствии с ожидаемой семантикой входного запроса.
В действительности RDBM содержат все виды структур из компьютерных наук... и каждый из них имеет высокоразвитые и специализированные методы для перевода подразумеваемой семантики SQL в конкретное хранилище.
Подумайте, как разные MySQL и Oracle... или PostgreSQL и Microsoft SQL. Они все пытаются выполнить какую-то общую SQL-подобную спецификацию... но как эта спецификация выполняется, она разнообразна.
Двигатели включают все виды экзотики, специализированные индексы, чтобы найти физическое местоположение данных, системы кэширования и многое другое.
Существуют тонны баз данных с открытым исходным кодом, такие как MySQL, PostgreSQL и поисковые системы, такие как Sphinx, вы можете взглянуть на их реализацию. Открытый исходный код предназначен для обучения как угодно! Попробуйте найти "наставника", чтобы вести вас через источник.
Ответ 3
Я уверен, что это имеет какое-то отношение к тому, как значения регулярно выкладываются в памяти, подобно массиву; но помимо этого, я не знаю многого другого.
Вы также можете посмотреть статьи на B + Trees. Что используются основные реляционные базы данных структуры данных.
Ответ 4
Вы можете прочитать эти книги:
[1] H. Garcia-Molina, Внедрение системы баз данных, Prentice Hall, 2000
[2] Р. Эльмас, С. Б. Навате, Основы систем баз данных, Издание Бенджамина/Каммингса. Comp., Inc, 1994