Организация файлов данных СУБД

Важным является понимание того , каким образом хранятся и организованы файлы с данными (таблицами) баз данных в СУБД.

Блочная структура хранения данных СУБД

Все таблицы СУБД разбиты на части, которые называются страницы (pages). При чтении данных (строки), страница целиком помещается в оперативную память, чтобы быть считанной.

Курс 1С: Эксперт. Хранение данных в СУБД (блочная структура)
Хранение данных в СУБД (блочная структура).

Такое хранение данных позволяет снизить нагрузку на СУБД, потому что при работе с данными таблица считывается не вся, а блоками.

Каждый отдельный блок с данными (page) имеет свой уникальный номер в рамках всей базы данных. СУБД на уровне своих метаданных знает, где и какие данные хранятся и кому принадлежат, не смотря на то, что сами страницы могут идти в разной последовательности.

Т.е. соседние page могут не принадлежать одной таблице. Это связано с тем, что страницы выделяются по мере необходимости, а необходимость может возникнуть для разных таблиц в разное время.

Содержимое делится на заголовок (header), строки (rows) и подвал (offset).

Header

Заголовок хранит информацию о строках, а так же в случае с индексом, информацию о соседних страницах (предыдущая и следующая).

Rows

В строках хранятся сами данные, аналогично как и в строках файла excel.

Footer

В подвале хранится информация о смещении строк, относительно их реального положения (offset).

Offset

Offset помогает установить порядок без физического удаления/перемещения строк внутри страниц. Т.е. сами строки не перемещаются и не удаляются, но их нумерация корректируется количеством смещения относительно 0.

Курс 1С: Эксперт. Структура страницы (header - rows - footer - offset)
Структура страницы (header — rows — footer — offset)

Операции над данными в СУБД

Удаление

При удалении конкретных данных из таблиц (БД), сами строки физически не удаляются из файла (блока файла), а помечаются как неактивные.

Таким образом, если была удалена строка №4, то следующая строка №5 будет иметь смещение (offset) на 1, в итоге 5-1=4, т.е. становится №4.

Добавление

При добавлении информации в БД, строка с данными добавляется в существующий блок (page) или новый, если все уже забиты.

Изменение

При изменении данных в строке (например, изменяем только одну колонку — Наименование), очищаются данные всех колонок. После чего выполняется попытка записать новые значения.

Но так как для конкретных полей уже выделен конкретный размер на диске (первоначальный), то могут возникнуть 2 ситуации:

  1. Новые данные занимают меньше места, чем старые — таким образом, создается пустое пространство (выделенное, но незанятое).
  2. Новые данные занимают больше места, чем старые — таким образом, они помещаются в другой блок, как новая. А в старом остается пустота и ссылка на новое место хранения.

Хранение больших данных

При хранении текста неограниченной величины или файлов, задействуются несколько страниц (информация разбивается).

Таким образом, повышается количество операций ввода/вывода, при чтении объекта.

Кучи и индексы

В куче данные между собой не связаны, т.е. отдельная страница не знает, где находится следующая и предыдущая. Но существует отдельная область (управляющая страница), которая содержит в себе всю информацию о страницах, связанных с таблицей.

В случае с индексом, над страницами данных есть управляющая надстройка, которая указывает, в каких страницах, какие данные хранятся, а точнее что содержит первая запись на конкретной странице.
Такая надстройка называется b-tree (balanced tree или сбалансированное дерево).

Курс 1С: Эксперт. Хранение данных в СУБД (сбалансированное дерево)
Хранение данных в СУБД (сбалансированное дерево)

Дерево называется сбалансированным, потому что какие бы данные СУБД не искала, она проделает одинаковое количество операций ввода вывода (I/O).

Данная тема подробнее рассматривается в пакете видео-курса «Секреты 1С: Эксперта» Шаг 2. Занятие 04-02 Хранение данных в СУБД.

Подготовка к 1С: Эксперт по технологическим вопросам. Константин Ефимов.

КОНСТАНТИН ЕФИМОВ
Комментарии и вопросы