Изменения

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

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

13 639 байт добавлено, 19:08, 4 сентября 2022
м
rollbackEdits.php mass rollback
{{Определение|definition='''Подсистема хранения данных''' (англ. ''database engine'', ''storage engine'') — компонент [[Архитектура РСУБД|СУБД]], управляющий механизмами хранения баз данных, или библиотека, подключаемая к программам и дающая им функции [[Архитектура РСУБД|СУБД]].}} Подсистема хранения данных отвечает за размещение баз данных (как правило, в файлах) и организацию конкурентного доступа к ним. Для манипулирования данными и структурами БД обычно используется язык SQL, при этом интерпретатор языка SQL обычно является компонентом СУБД, а не подсистемы хранения. Библиотека же позволяет программе использовать определённый формат файлов баз данных для манипулирования данными. В разработкеболее сложном случае, она позволяет нескольким программам работать с общими файлами баз данных одновременно, используя те или иные механизмы блокировок. В некоторых СУБД подсистема хранения неотделима от неё самой, но ряд подсистем могут встраиваться или подключаться к разным СУБД, например, системы семейства MySQL<ref>[https://www.mysql.com MySQL]</ref>. Некоторые известные подключаемые подсистемы хранения: SQLite<ref>[http://www.sqlite.org SQLite]</ref>, DBM<ref>[https://en.wikipedia.org/wiki/DBM_(computing) DBM]</ref> (ключ — значение). == Структура =={{Определение|definition='''Структура данных''' — это абстрактная конструкция, в которой данные размещаются четко определенным образом.}}
= Структура =
{| class="wikitable" style="float:right; margin-left:0.8em; clear:right;"
|+ Типы памяти
* Сократить число обращений
** Сделать их последовательными
Основная причина, побуждающая к постоянному совершенствованию всей технологии организации структур хранения и методов доступа, состоит в том, что характеристики доступа к диску намного хуже по сравнению с соответствующими характеристиками доступа к оперативной памяти.
 
Таким образом, наиболее важное направление повышения производительности состоит в уменьшении до минимума количества операций доступа к диску (или дисковых операций ввода—вывода).
 
По природе современных компьютеров большая часть части базы данных внутри компьютера, на котором размещена СУБД, находится (частично реплицируется) в энергозависимой памяти.
 
Эффективная структура данных позволяет манипулировать данными эффективными способами. Манипуляции с данными могут включать в себя вставку, удаление, обновление и извлечение данных в различных режимах.
 
Определенный тип структуры данных может быть очень эффективным в одних операциях и очень неэффективным в других.
 
Тип структуры данных выбирается при разработке СУБД, чтобы наилучшим образом соответствовать операциям, необходимым для типов данных, которые она содержит.
 
Тип структуры данных, выбранный для выполнения определенной задачи, обычно учитывает также тип хранилища, в котором она находится (например, скорость доступа, минимальный размер обрабатываемого куска хранилища и т.д.).
 
В некоторых СУБД администраторы баз данных имеют возможность выбирать из вариантов структур данных для содержания пользовательских данных по соображениям производительности. Иногда структуры данных имеют выбираемые параметры для настройки производительности базы данных.
== Страничная организация памяти ==
{{Определение
|definition='''Страничная память''' — способ организации виртуальной памяти, при котором виртуальные адреса отображаются на физические постранично.
}}
 
Все современные СУБД умеют использовать.
* Частые переходы к следующей/предыдущей странице
* Желательно хранить последовательно
 
=== Преимущества страничной памяти ===
* Легко выделять физическую память — списки свободных ячеек;
* Естественный подход — все ячейки одного размера;
 
=== Недостатки страничной памяти ===
* Внутренняя фрагментация;
** Процессам может быть нужны размеры, некратные размеру страницы;
** По сравнению с размером адресного пространства, размер страницы очень мал;
* Накладные расходы при обращении к памяти;
** вначале к таблице страниц, а затем уже к памяти:
*** '''''Решение:''''' аппаратный КЭШ для обращений к таблице страниц ('''''TLB''''' translation lookaside buffer – буфер внутри процессора);
* Большой объем памяти, требуемый для хранения таблиц страниц.
== Модули системы хранения ==
[[Файл:dbms-data-access.png|450px|thumb|right|Схема доступа к данным]]
 
=== Диспетчер диска ===
* Каталог страниц
* Доступ к записям
В решении задачи поиска конкретного фрагмента данных в базе данных и передачи его пользователю участвует несколько различных уровней программного обеспечения. Безусловно, подробности устройства этих уровней в значительной степени зависят от конкретной системы (к тому же в разных системах часто применяется различная терминология), но используемые при этом принципы являются довольно стандартными, и эти принципы кратко описаны ниже: #Вначале СУБД определяет, какая ей требуется запись, и передает диспетчеру записей запрос на выборку этой записи. (В целях этого простого описания предполагается, что СУБД обладает способностью заблаговременно и точно определять, какая именно запись ей потребуется. На практике чаще всего возникает необходимость сделать выборку набора из нескольких записей и выполнить поиск среди этих записи в оперативной памяти, чтобы найти ту конкретную запись, которая действительно требуется. Но, в принципе, это означает лишь то, что последовательность шагов 1—3 иногда приходится повторять для каждой записи из этого набора);#Диспетчер страниц свою очередь определяет, какая страница содержит требуемую запись, и передает диспетчеру диска запрос на выборку этой страницы;#Наконец, диспетчер диска определяет физическое местонахождение желаемой страницы на диске и выдает необходимый запрос на выполнение операции ввода-вывода на диске. '''''Примечание.''''' Безусловно, что иногда требуемая страница может уже находиться в буфере оперативной памяти в результате ранее выполненной операции выборки, и в этом случае, безусловно, необходимость повторно осуществлять ее выборку не возникает. == Организация данных ==* Файл – одна или несколько таблиц (чаще всего);* Таблица – несколько страниц;* Страница – несколько записей.
=== Какие проблемы? ===
* Диспетчер диска – последовательности
* Диспетчер памяти – предвыборка
 
Все множество страниц на диске разбивается на коллекцию непересекающихся подмножеств, называемых наборами страниц. Один из этих наборов страниц (набор свободных страниц) служит в качестве пула доступных (т.е. не используемых в настоящее время) страниц; все другие страницы рассматриваются как содержащие значимые данные. Включение страниц в наборы страниц и исключение страниц из этих наборов осуществляется диспетчером диска в ответ на запросы диспетчера файлов.
 
Каждый файл обозначается именем файла или идентификатором файла, уникальным, по меньшей мере, в содержащем его наборе страниц, а каждая запись, в свою очередь, обозначается номером записи или '''идентификатором записи''' ('''''Record I D — RID'''''), уникальным, по меньшей мере, в содержащем его файле. (Обычно на практике идентификатор записи является уникальным не только в содержащем его файле, но фактически и на всем диске, поскольку он, как правило, состоит из комбинации номера страницы и некоторого значения, уникального в пределах этой страницы.
=== Идентификатор записи (RID) ===
== Сжатие данных ==
Тратим Методы сжатия используются для уменьшения объема памяти, необходимого для хранения определенной коллекции данных. Очень часто результатом такого сжатия становится не только экономия пространства памяти, но и сокращение количества операций ввода-вывода на диске (причем, возможно, еще более значительное по сравнению с экономией памяти). Дело в том, что если данные занимают меньше места, то для доступа к ним требуется меньше операций ввода-вывода. С другой стороны, требуется дополнительная обработка для восстановления данных (преобразования сжатых данных в исходный формат) после их выборки. Иначе говоря, тратим больше процессорного времени, в надежде потратить меньше времени для ввода/вывода (чаще всего окупается).
* Больше вычислений
* Меньше ввода-вывода
* Часто – быстрее
 
В основе методов сжатия лежит тот факт, что значения данных почти никогда не бывают полностью случайными и характеризуются определенной степенью предсказуемости. В качестве простейшего примера можно указать, что если имя некоторого лица в файле имен и адресов начинается с буквы R, то весьма вероятно, что имя следующего лица также будет начинаться с буквы R, разумеется, при условии, что файл отсортирован по именам в алфавитном порядке.
Мы можем прибегать к использованию структур данных, поскольку мы храним связанные записи, в частности у них одинаковая структура и т.д.
=== Пример ===
* Сжатие по полям;* Инкрементальное сжатие;* Префиксное сжатие;* Суффиксное сжатие;* Кодирование [[Алгоритм Хаффмана|по методу Хаффмана]]. == Примечания == <references />
== Литература ==
* ''Дейт К. Введение в системы баз данных (Приложение Г)''
* ''Кнут Д. Искусство программирования. Том 3. Сортировка и поиск''
1632
правки

Навигация