Опубликован: 04.06.2009 | Уровень: специалист | Доступ: свободно | ВУЗ: Нижегородский государственный университет им. Н.И.Лобачевского
Лекция 9:

Физические модели данных (внутренний уровень)

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >

9.3. Организация обмена между оперативной и внешней памятью

Единицей обмена данными между оперативной и внешней памятью является физическая запись. Физическая запись читается (записывается) за одно обращение к внешней памяти. В частности, физическая запись может соответствовать одному экземпляру логической записи. Число обращений к внешней памяти при работе с базой данных определяет время отклика системы. В связи с этим для уменьшения числа обращений к БД при работе с ней увеличивают длину физической записи (объединяют в одну физическую запись несколько экземпляров логических записей). В этом случае физическую запись называют также блоком, число k экземпляров логических записей, составляющих физическую запись, – коэффициентом блокировки.

Ввод исходных данных в БД осуществляется следующим образом:

  • в ОП последовательно вводятся k экземпляров логических записей (кортежей);
  • введенные k экземпляров объединяются в физическую запись (блок);
  • физическая запись заносится во внешнюю память.

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

Схема занесения записей во внешнюю память

Рис. 9.3. Схема занесения записей во внешнюю память

Обработка данных, хранящихся во внешней памяти, осуществляется следующим образом:

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

В некоторых СУБД (например, MS SQL Server) единицей обмена между оперативной и внешней памятью является страница (вид физической записи, размер которой фиксирован и не зависит от длины логической записи). Организация обмена между оперативной и внешней памятью в этом случае аналогична описанной выше. Отличие здесь будет состоять в том, что экземпляры логических записей формируются в буфере, размером со страницу (если размер страницы не кратен длине логической записи, страница может быть заполнена неполностью, физическая запись на внешнем носителе, соответственно, будет заполнена не полностью).

9.4. Структуры хранения данных во внешней памяти ЭВМ

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

В качестве внешней памяти мы рассматриваем наиболее распространенную в современных ЭВМ память прямого доступа. Память прямого доступа дает возможность обращения к любой записи, если известен её адрес. Для упрощения изложения мы не будем конкретизировать ряд служебных полей, которые содержит физическая запись, и их рассмотрение опускаем.

9.4.1. Последовательное размещение физических записей

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

Физическая запись с номером I содержит логические записи с номерами

(I – 1) k+1
\\
(I – 1) k+2
\\
\dots 
\\
(I – 1) k+k
\\
I = 1, 2, \dots , \lceil N/k\rceil ;

знаком \lceil N/k\rceil обозначим ближайшее целое, большее или равное N/k, – целое сверху.

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

Поиск записи с заданным значением ключа

При последовательной структуре хранения поиск может осуществляться только перебором. Читается первая физическая запись, в ОП она разбивается на k логических записей (разблокируется), заданное значение ключа сравнивается со значением ключа каждой логической записи. При несовпадении читается следующая физическая запись и процесс повторяется. В лучшем случае нужная запись будет найдена за одно обращение, в худшем – необходимо считать все физические записи. Среднее число обращений к внешней памяти для поиска нужной записи ТР определяется следующей формулой

ТР = (1+\lceil N/k\rceil )/2,

где N – число логических записей, k – коэффициент блокировки, \lceil N/k\rceil – число физических записей.

Чтение записи с заданным значением ключа

Сначала необходимо найти нужную запись (смотри операцию "поиск"). После окончания операции "поиск" нужная запись уже считана в ОП. Число обращений к ВП равно ТР.

Корректировка записи

Сначала необходимо найти нужную запись (смотри операцию "поиск"). После окончания операции "поиск" в ОП найденная логическая запись корректируется, формируется физическая запись (блок) и заносится во внешнюю память по тому адресу, откуда она была считана. Число обращений к ВП равно ТР+1.

Удаление записи

Аналогична операции корректировки. Служебное поле соответствующей логической записи помечается как "удаленная запись". Число обращений к ВП равно ТР+1.

Добавление записи

Рассмотрим два случая. В первом случае пользователь вводит новую логическую запись в конец таблицы. Тогда вводимая логическая запись добавляется в конец файла. Она заносится либо в последнюю физическую запись (если в ней меньше k логических записей – блок неполон), для чего эта запись должна быть считана в ОП, или формируется новая физическая запись, которая заносится в конец файла. Число обращений к ВП равно соответственно либо 2, либо 1.

Во втором случае пользователь вводит новую логическую запись в указываемую им i-ю строку таблицы ( i=1, 2, ..., n ). В этом случае читается физическая запись с номером \lceil (i-1)/k\rceil, содержащая i-ю логическую запись. Если соответствующая физическая запись содержит пустые логические записи, то добавляемая запись вставляется в этот блок, блок записывается на свое место в ВП. Число обращений к ВП равно 2. Если указанная физическая запись содержит k экземпляров логических записей исходной таблицы, читается физическая запись с номером \lceil i/k\rceil. Если эта физическая запись содержит пустые логические записи, добавляемая запись вставляется в этот блок, блок записывается на свое место в ВП. Суммарное число обращений в этом случае будет на единицу больше и равно 3.

Если физические записи с номерами \lceil (i-1)/k\rceil и \lceil i/k\rceil содержат по k экземпляров исходных логических записей, необходимо формировать дополнительную физическую запись. Соответствующий блок будет содержать добавляемую логическую запись и k-1 пустых логических записей. Блоки с номерами \lceil i/k\rceil , \lceil (i+1)/k\rceil , \dots  \lceil N/k\rceil переписываются на одну позицию ниже (сдвигаются). Сформированная физическая запись заносится на освободившееся место (место записи с номером \lceil i/k\rceil ).

В лучшем случае (i = N) ни один блок не сдвигается. В худшем случае (i = 1) сдвигаются все блоки. Среднее число обращений к ВП для перезаписи блоков (чтение + запись) составит 2\lceil N/k\rceil /2. Тогда суммарное число обращений к ВП при добавлении записи в этом случае будет равно 3+\lceil N/k\rceil.

Заметим, что если записи упорядочены по значениям ключа поиск может производиться дихотомическим методом и число обращений к внешней памяти будет пропорционально не (1+\lceil N/k\rceil )/2, а log_{2}\lceil N/k\rceil , т.е. существенно меньше. Однако добавление записи потребует для сохранения упорядоченности, как правило, сдвига большого числа записей. Поэтому размещение физических записей с упорядочением их по значениям ключа в СУБД не используется.

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >
Александра Каева
Александра Каева
Карина Максутова
Карина Максутова
Андрей Садовщиков
Андрей Садовщиков
Россия