Изменения

Перейти к: навигация, поиск

Подсистема хранения данных

9658 байт добавлено, 13:32, 27 декабря 2021
update
{{В разработке}}
{{Определение
|definition='''Подсистема хранения данных''' (англ. ''database engine'', ''storage engine'') — компонент [[Архитектура РСУБД|СУБД]], управляющий механизмами хранения баз данных, или библиотека, подключаемая к программам и дающая им функции [[Архитектура РСУБД|СУБД]].
}}
 
Подсистема хранения данных отвечает за размещение баз данных (как правило, в файлах) и организацию конкурентного доступа к ним. Для манипулирования данными и структурами БД обычно используется язык SQL, при этом интерпретатор языка SQL обычно является компонентом СУБД, а не подсистемы хранения.
 
Библиотека же позволяет программе использовать определённый формат файлов баз данных для манипулирования данными. В более сложном случае, она позволяет нескольким программам работать с общими файлами баз данных одновременно, используя те или иные механизмы блокировок.
 
В некоторых СУБД подсистема хранения неотделима от неё самой, но ряд подсистем могут встраиваться или подключаться к разным СУБД, например, системы семейства MySQL[https://www.mysql.com]. Некоторые известные подключаемые подсистемы хранения: SQLite[http://www.sqlite.org], DBM[https://en.wikipedia.org/wiki/DBM_(computing)] (ключ — значение).
= Структура =
{{Определение
|definition='''Структура данных''' — это абстрактная конструкция, в которой данные размещаются четко определенным образом.
}}
 
{| class="wikitable" style="float:right; margin-left:0.8em; clear:right;"
|+ Типы памяти
* Сократить число обращений
** Сделать их последовательными
Основная причина, побуждающая к постоянному совершенствованию всей технологии организации структур хранения и методов доступа, состоит в том, что характеристики доступа к диску намного хуже по сравнению с соответствующими характеристиками доступа к оперативной памяти.
 
Таким образом, наиболее важное направление повышения производительности состоит в уменьшении до минимума количества операций доступа к диску (или дисковых операций ввода—вывода).
 
По природе современных компьютеров большая часть части базы данных внутри компьютера, на котором размещена СУБД, находится (частично реплицируется) в энергозависимой памяти.
 
Эффективная структура данных позволяет манипулировать данными эффективными способами. Манипуляции с данными могут включать в себя вставку, удаление, обновление и извлечение данных в различных режимах.
 
Определенный тип структуры данных может быть очень эффективным в одних операциях и очень неэффективным в других.
 
Тип структуры данных выбирается при разработке СУБД, чтобы наилучшим образом соответствовать операциям, необходимым для типов данных, которые она содержит.
 
Тип структуры данных, выбранный для выполнения определенной задачи, обычно учитывает также тип хранилища, в котором она находится (например, скорость доступа, минимальный размер обрабатываемого куска хранилища и т.д.).
 
В некоторых СУБД администраторы баз данных имеют возможность выбирать из вариантов структур данных для содержания пользовательских данных по соображениям производительности. Иногда структуры данных имеют выбираемые параметры для настройки производительности базы данных.
 
= Организация данных =
* Файл – одна или несколько таблиц (чаще всего);
* Таблица – несколько страниц;
* Страница – несколько записей.
 
=== Какие проблемы? ===
Записи длиннее страницы. Не все СУБД это позволяют (записи длиннее страницы не поддерживаются (исключение - колонки BLOB, CLOB, которые могут храниться отдельно))
 
== Модули системы хранения ==
[[Файл:dbms-data-access.png|450px|thumb|right|Схема доступа к данным]]
 
=== Диспетчер диска ===
* Каталог страниц
* Оптимизация последовательностей страниц
=== Диспетчер страниц ===
* Доступ к страницам
* Распределение памяти
* Выгрузка данных
=== Диспетчер записей ===
* Доступ к записям
 
В решении задачи поиска конкретного фрагмента данных в базе данных и передачи его пользователю участвует несколько различных уровней программного обеспечения. Безусловно, подробности устройства этих уровней в значительной степени зависят от конкретной системы (к тому же в разных системах часто применяется различная терминология), но используемые при этом принципы являются довольно стандартными, и эти принципы кратко описаны ниже:
 
#Вначале СУБД определяет, какая ей требуется запись, и передает диспетчеру записей запрос на выборку этой записи. (В целях этого простого описания предполагается, что СУБД обладает способностью заблаговременно и точно определять, какая именно запись ей потребуется. На практике чаще всего возникает необходимость сделать выборку набора из нескольких записей и выполнить поиск среди этих записи в оперативной памяти, чтобы найти ту конкретную запись, которая действительно требуется. Но, в принципе, это означает лишь то, что последовательность шагов 1—3 иногда приходится повторять для каждой записи из этого набора);
#Диспетчер страниц свою очередь определяет, какая страница содержит требуемую запись, и передает диспетчеру диска запрос на выборку этой страницы;
#Наконец, диспетчер диска определяет физическое местонахождение желаемой страницы на диске и выдает необходимый запрос на выполнение операции ввода-вывода на диске.
 
'''''Примечание.''''' Безусловно, что иногда требуемая страница может уже находиться в буфере оперативной памяти в результате ранее выполненной операции выборки, и в этом случае, безусловно, необходимость повторно осуществлять ее выборку не возникает.
== Страничная организация памяти ==
{{Определение
|definition='''Страничная память''' — способ организации виртуальной памяти, при котором виртуальные адреса отображаются на физические постранично.
}}
 
Все современные СУБД умеют использовать.
* Желательно хранить последовательно
== Модули системы хранения ==[[Файл:dbms-data-access.png|450px|thumb|right|Схема доступа к данным]]=== Диспетчер диска ===* Каталог страниц* Оптимизация последовательностей страниц=== Диспетчер страниц ===* Доступ к страницам* Распределение Преимущества страничной памяти* Выгрузка данных=== Диспетчер записей ===* Доступ к записям = Организация данных =* Файл – одна или несколько таблиц (чаще всего)* Таблица – несколько страницЛегко выделять физическую память — списки свободных ячеек;* Страница – несколько записейЕстественный подход — все ячейки одного размера;
=== Какие проблемы? Недостатки страничной памяти ===Записи длиннее * Внутренняя фрагментация;** Процессам может быть нужны размеры, некратные размеру страницы. Не все СУБД это позволяют (записи длиннее ;** По сравнению с размером адресного пространства, размер страницы не поддерживаются очень мал;* Накладные расходы при обращении к памяти;** вначале к таблице страниц, а затем уже к памяти: *** '''''Решение:''''' аппаратный КЭШ для обращений к таблице страниц (исключение - колонки BLOB'''''TLB''''' translation lookaside buffer – буфер внутри процессора);* Большой объем памяти, CLOB, которые могут храниться отдельно))требуемый для хранения таблиц страниц.
== Список страниц ==
Анонимный участник

Навигация