Файл: Базы данных - уч. пособие.pdf

Добавлен: 28.11.2018

Просмотров: 10876

Скачиваний: 43

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Глава 6

ФИЗИЧЕСКАЯ ОРГАНИЗАЦИЯ БАЗ

ДАННЫХ

6.1 Структуры внешней памяти, методы
организации индексов

6.1.1 Организация внешней памяти

Знание физической структуры данных позволяет обеспечить качественное вы-

полнение физического проектирования БД.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Физическое проектирование БД — это отдельный процесс, тес-
но связанный с логическим проектированием и управлением раз-
мещения наборов данных, включающий процесс организации хра-
нения данных с определением формата хранимой записи и класси-
фикации записей.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Реляционные СУБД обладают рядом особенностей, влияющих на организацию

внешней памяти. К наиболее важным особенностям можно отнести следующие [1]:

1) наличие двух уровней системы: уровня непосредственного управления дан-

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

2) поддержание отношений-каталогов. Информация, связанная с именовани-

ем объектов базы данных и их конкретными свойствами (например, струк-
тура ключа индекса), поддерживается подсистемой языкового уровня.


background image

6.1 Структуры внешней памяти, методы организации индексов

117

С точки зрения структур внешней памяти отношение-каталог ничем не от-
личается от обычного отношения базы данных;

3) регулярность структур данных. Поскольку основным объектом реляцион-

ной модели данных является плоская таблица, главный набор объектов
внешней памяти может иметь очень простую регулярную структуру. При
этом необходимо обеспечить возможность эффективного выполнения опе-
раторов языкового уровня как над одним отношением (простые селекция
и проекция), так и над несколькими отношениями (наиболее распростране-
но и трудоемко соединение нескольких отношений). Для этого во внешней
памяти должны поддерживаться дополнительные «управляющие» структу-
ры — индексы;

4) избыточность хранения данных для выполнения требования надежного хра-

нения баз данных, что обычно реализуется в виде журнала изменений базы
данных.

Соответственно возникают следующие разновидности объектов баз данных:

• таблицы — основные объекты базы данных, большей частью непосред-

ственно видимые пользователям;

• последовательности — объекты БД, используемые для формирования уни-

кальных числовых величин;

• индексы — управляющие структуры, создаваемые по инициативе разработ-

чика (администратора) баз данных или верхнего уровня системы в целях
повышения эффективности выполнения запросов и обычно автоматически
поддерживаемые нижним уровнем системы;

• представления (views) — хранимые предложения SQL (запросы на выбор-

ку), которые можно запросить как таблицу;

• триггеры (triggers) — хранимые процедуры, запускаемые при выполнении

определенных действий с таблицей;

• хранимая процедура — выполняемый объект, реализованный с помощью

процедурного расширения SQL, которому можно передать аргументы и по-
лучить от него сформированные результаты;

• хранимая функция отличается от хранимой процедуры тем, что возвра-

щаемым результатом выполнения функции является некоторое единичное
значение;

• хранимые пакеты представляют собой совокупность процедур, перемен-

ных и функций, объединенных для выполнения некоторой задачи;

• журнальная информация, поддерживаемая для удовлетворения потребно-

сти в надежном хранении данных;

• служебная информация, поддерживаемая для удовлетворения внутренних

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

Любая СУБД основывается на конкретном комплексном решении задач, свя-

занных с организацией хранения и управления данными. Рассмотрим лишь неко-
торые варианты таких решений.


background image

118

Глава 6. Физическая организация баз данных

6.1.2 Хранение таблиц в базе данных

Существуют разные способы физического хранения отношений, и от того, как

это хранение организовано, зависит быстродействие работы с базой данных. Из-
начально выделялось два типа хранения отношений: покортежное хранение отно-
шений и хранение отношений по столбцам. Покортежное хранение, при котором
кортеж является физической единицей хранения, обеспечивает быстрый доступ
к кортежу целиком, но замедляется работа с БД при необходимости оперировать
только частью кортежа.

При организации хранения отношения по столбцам единицей хранения явля-

ется атрибут отношения. В этом случае в среднем тратится меньше памяти, необ-
ходимой для хранения отношения, так как исключаются дублирующие значения
атрибутов. Однако при такой организации хранения необходимо наличие допол-
нительных надстроек, обеспечивающих связь разрозненно хранящихся значений
атрибутов в единый кортеж отношения.

В настоящее время в каждой конкретной СУБД существует свой формат хране-

ния таблиц и других объектов баз данных. Наиболее открытым с точки зрения ви-
зуального представления является формат DBF, используемый в СУБД семейства
dBase (dBase III, IV, V, FoxPro 2.x), в котором применяется обычное покортежное
хранение отношений. Dbf-файл организован таким образом, что в одном файле
хранится одна таблица базы данных (отметим, что dbf-файл носит при этом назва-
ние «база данных»). Структура dbf-файла представлена следующим образом [18]:

• файл базы данных состоит из записи заголовка и записей с данными;

• в записи заголовка определяется структура базы данных и содержится дру-

гая информация, относящаяся к базе данных;

• непосредственно записи с данными следуют за заголовком (байты распо-

лагаются последовательно) и включают в себя фактическое содержимое
полей;

• длина записи (в байтах) определяется суммированием указанных длин всех

полей;

• запись — это строка символов, состоящая из частей (полей) строго опреде-

ленного размера. Эти размеры указаны в структуре описания.

В таблице 6.1 представлена структура dbf-файла.

Таблица 6.1 – Структура dbf-файла

Количество байт

Наименование

32

Заголовок DBF-файла

32

Описание первого поля

32

Описание второго поля

. . .

. . .

32

Описание n-го поля

1

Завершающий символ 0x0D (13)

RecordSize

Первая запись из n-полей

продолжение на следующей странице


background image

6.1 Структуры внешней памяти, методы организации индексов

119

Таблица 6.1 — Продолжение

Количество байт

Наименование

RecordSize

Вторая запись из n-полей

. . .

. . .

RecordSize

m-я запись из n-полей, где m=RecordsCount

1

Завершающий символ 0x1A (26)

RecordSize (размер записи в байтах) и RecordsCount (количество записей), зна-

чения которых берутся из заголовка DBF-файла.

В зависимости от СУБД физически все таблицы могут храниться в одном фай-

ле (MS Access, Mysql и др.) или для каждой таблицы может быть выделен отдель-
ный файл (dBase). Кроме этого, также могут быть выделены файлы отдельных
форматов для хранения других объектов БД.

6.1.3 Организация индексов, методы хранения и доступа
к данным

Во всех существующих на рынке СУБД имеется в наличии средство, оптими-

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

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Как отмечалось в предыдущем разделе, индекс представляет со-
бой некий упорядоченный указатель на записи в таблице.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Понятие «указатель» означает, что индекс представляется как совокупность

значений одного или нескольких полей таблицы БД и адресов страниц данных,
где физически располагаются эти значения. То есть индекс состоит из пар значе-
ний «значение поля» — «физическое расположение этого поля». При этом индекс
не является частью таблицы — это отдельный, взаимосвязанный с таблицей (или
таблицами) объект БД. В целом индекс можно описать как специальную структуру
данных, создаваемую автоматически или по запросу пользователя.

. . . . . . . . . . . . . . . . . . . . . .

Пример 6.1

. . . . . . . . . . . . . . . . . . . . .

Индексы принято сравнивать с библиотечным каталогом, в котором информа-

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

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


background image

120

Глава 6. Физическая организация баз данных

Поиск данных в таблице без использования индекса можно сравнить с после-

довательным перебором всех книг в библиотеке. Большинство таблиц в БД имеют
большое количество записей, которые хранятся в определенном формате, и по-
иск необходимых данных по заданному критерию запроса путем последовательно-
го перебора таблицы — запись за записью, естественно, может занимать большое
количество времени. Индекс позволяет быстро искать строки, удовлетворяющие
критерию поиска. Ускорение работы с использованием индексов обеспечивается
несколькими факторами, во-первых, за счёт того, что индекс имеет специальную
структуру, оптимизированную под поиск, во-вторых, сами таблицы в БД могут хра-
ниться таким образом, чтобы обеспечивать оптимальный доступ к индексируемым
полям.

Фактически, индекс описывает отношения упорядочивания и однозначности

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

Общей идеей любой организации индекса, поддерживающего прямой доступ

по ключу и последовательный просмотр в порядке возрастания или убывания зна-
чений ключа, является хранение упорядоченного списка значений ключа с при-
вязкой к каждому значению ключа списка идентификаторов кортежей. Один вид
организации индекса отличается от другого главным образом по способу поиска
ключа с заданным значением [1].

Различают следующие методы хранения и доступа к данным: физический по-

следовательный, индексно-последовательный, индексно-произвольный, инвертиро-
ванный, метод хеширования и др. Рассмотрим некоторые из них, основываясь,
в том числе, на сведениях из [9].

Инвертированный метод (метод вторичного индексирования)
Значения ключей физических записей необязательно находятся в логической

последовательности. Метод применяется только для выборки данных. Индекс мо-
жет быть построен для каждого инвертированного поля. Эффективность доступа
зависит от числа записей БД, числа уровней индексации и распределения памяти
для размещения индекса.

Инвертированные индексы, также называемые словарными файлами, представ-

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

Инвертированные списки формируются системой для поисковых атрибутов,

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

Записи с одним и тем же значением поля группируются, а общее для всей

группы значение используется в качестве указателя этой группы. Тогда при поиске
записей по значениям поисковых атрибутов системе достаточно отыскать списки,
соответствующие требуемым значениям, и выбрать номер записи согласно задан-
ной «схеме» пересечения или объединения условий на значениях поисковых ат-
рибутов, а также отрицания некоторого условия. На рисунке 6.1 приведен пример
поиска записей инвертированным методом доступа.