Лекции и практики (1). Курс лекций и материалы для практических занятий
Скачать 1.01 Mb.
|
Виды адресации хранимых записейВ общем случае адреса записей БД нигде не хранятся. При поиске данных СУБД из словаря-справочника данных берёт информацию о том, в какой обла- сти памяти (например, в каком файле и/или на каких страницах памяти) распо- ложены данные указанной таблицы. Но при этом для поиска конкретной записи (по значениям ключевых полей) система вынуждена будет прочитать всю таб- лицу. В РСУБД для ускорения поиска данных применяются индексы – специ- альные структуры, устанавливающие соответствие значений ключевых полей записи и "адреса" этой записи (КБД). Таким образом, вид адресации хранимых записей оказывает влияние на производительность, а также на переносимость БД с одного носителя на другой. Рассмотрим три вида адресации: прямую, косвенную и относительную. Прямая адресация предусматривает указание непосредственного место- положения записи в пространстве памяти. Прямая адресация используется, например, в системе ADABAS. Недостатком такой адресации является большой размер адреса, обусловленный большим размером пространства памяти. Кроме того, прямая адресация не позволяет перемещать записи в памяти без измене- ния КБД. Такие изменения привели бы к необходимости коррекции различных указателей на записи в среде хранения (например, в индексах, см. раздел 5.5.2), что было бы чрезвычайно трудоёмкой процедурой. Отсутствие возможности перемещать запись ведёт к фрагментации памяти. Указанные недостатки можно преодолеть, используя косвенную адреса- цию. Общий принцип косвенной адресации заключается в том, что в качестве КБД выступает не сам "адрес записи", а адрес места хранения "адреса записи". Существует множество способов косвенной адресации. Один из них со- стоит в том, что часть адресного пространства страницы выделяется под индекс страницы (рис. 5.2). Число статей (слотов) в нём одинаково для всех страниц. В качестве КБД записи выступает совокупность номера нужной страницы и но- мера требуемого слота в индексе этой страницы (значения N, i на рис. 5.2). В i-м слоте на N-й странице хранится собственно адрес записи (смещение от начала страницы). Рис. 5.2. Косвенная адресация с использованием индексируемых страниц При перемещении записи она остаётся на той же странице, и слот по- прежнему указывает на неё (меняется его содержимое, но не сам слот). Если запись не вмещается на страницу, она помещается на специально отведённые в данной области страницы переполнения, и соответствующий слот продолжает указывать на место её размещения. Этот подход позволяет перемещать записи на странице, исключать фраг- ментацию, возвращать освободившуюся память для повторного использования. Третий способ адресации – относительная адресация. Простейший ва- риант относительной адресации может использоваться, например, в ситуации, когда данные одного объекта БД (таблицы) хранятся в отдельном файле и хра- нимая запись имеет формат фиксированной длины. Тогда в качестве значения КБД берётся порядковый номер записи, по которому можно вычислить смеще- ние от начала файла. (Пример такой адресация – системы dBaseIII, dBaseIV). Общий принцип относительной адресации заключается в том, что адрес отсчитывается от начала той области памяти, которую занимают данные объек- та БД. Если память разбита на страницы (блоки), то адресом может выступать номер страницы (блока) и номер записи на странице (или смещение от начала страницы). В случае относительной адресации перемещение записи приведёт к изменению КБД и необходимости корректировки индексов, если они есть. Примечание: некоторые СУБД, использующие относительную адресацию, при необходимо- сти перемещения отдельной записи оставляют КБД прежним. Т.е. физически запись хранится на новом месте, а по старому адресу хранится новый адрес записи. Это поз- воляет не менять КБД и не перестраивать индексы, но приводит к увеличению време- ни доступа к записи (2 физических чтения вместо одного). |