Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы и банки данных / Базы и банки данных (5 сем).doc
Скачиваний:
76
Добавлен:
01.05.2014
Размер:
705.54 Кб
Скачать

Диспетчер файлов

Файломназывается хранимый набор однотипных записей. Каждый набор страниц может содержать один или несколько хранимых файлов. Каждый файл имеетимяилиидентификационный номер, уникальные в данном наборе страниц. А каждая хранимая запись, в свою очередь, обладаетидентификационным номером записи, уникальным в пределах данного хранимого файла. Обычно идентификационные номера уникальны не только для данного файла, но и для всего диска., поскольку они обычно составляются на основе комбинации номера страницы и некоторого значения, уникального внутри данной страницы. Основными операциями, выполняемыми диспетчером файлов, являются:

  • Извлечь хранимую запись rиз хранимого файлаf.

  • Заменить хранимую запись rиз хранимого файлаf.

  • Добавить новую хранимую запись rв хранимый файлf.

  • Удалить хранимую запись rиз хранимого файлаf.

  • Создать новый хранимый файл f.

  • Удалить хранимый файл f.

В одних системах диспетчер файлов является компонентом операционной системы, а в других поставляется в составе СУБД.

Кластеризация

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

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

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

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

Естественно, в каждый момент времени кластеризацию можно осуществить только одним из способов.

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

Наборы страниц и файлы

Как говорилось выше, основной функцией диспетчера дисков является скрытие от диспетчера файлов всех деталей физических операций ввода-вывода и замена их логическими «страничными» операциями. Эта функция диспетчера дисков называется управление страницами.

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

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

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

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

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

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

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

Как уже отмечалось, хранимые записи идентифицируются с помощью идентификационного номера записи (RID). Идентификационный номер записиrсостоит из двух частейномера страницыp, на которой данная запись находится, и байта смещения слота от конца страницы р, который, в свою очередь, содержит байт смещения записиrот начала страницы р (рис.2). Эта схема является компромиссом между быстротой непосредственной адресации и гибкостью косвенной. В результате, записи внутри страницы могут сдвигаться вверх и вниз без изменения идентификационных номеров записей (изменяются только значения локальных смещений в конце страницы). Кроме того, при известном идентификационном номере записи доступ к ней осуществляется очень быстро, поскольку осуществляется доступ к данной странице.

Рис.2. Структура идентификационного номера записи (RID)

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

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

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

  1. Извлечение средней страницы для оставшейся на данный момент части файла. Проверка наличия искомой записи между первой и последней записями на этой странице. Если это так, то извлечение страниц прекращается, поскольку требуемая запись находится в данной странице.

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

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

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

Далее будут описаны более «совершенные» способы упорядочивания записей, т.е. способы доступа, которые отличаются от физической последовательности. Эти технологии не стоит рассматривать как взаимно исключающие. Часто бывает полезно обеспечить гибкий доступ к хранимому файлу либо с помощью хеширования и индексирования на основе некоторого поля, либо с помощью хеширования на основе одного поля и цепочки указателей на основе другого.