Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БДЗиЭС / Базы данных, знаний и экспертные системы. Часть 1 (теория).pdf
Скачиваний:
166
Добавлен:
11.05.2015
Размер:
8.54 Mб
Скачать

98

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

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

8.3.8ИНВЕРТИРОВАННЫЕ СПИСКИ

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

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

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

8.3.9КОСВЕННЫЙ ИНДЕКС

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

99

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

Во-вторых, целый класс запросов может быть обработан без обращения к самим данным. Рассмотрим запрос «Выдать список номеров изделий, являющихся куклами, в диапазоне от 1000 до 1500». Если бы инвертированный список на рис. 26.8 содержал номера изделий, а не адреса записей, запрос мог бы быть обработан просмотром только этого списка. При обработке запросов на записи с несколькими ключами поиск можно ускорить, если в каждом элементе индекса завести счетчик числа записей, соответствующих данному ключу, и начинать поиск с ключа, которому соответствует самый короткий инвертированный список.

8.3.10 СЕКЦИОННЫЕ ИНВЕРТИРОВАННЫЕ СПИСКИ

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

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

Если нас интересует список всех черных уток, то из строки битов для атрибута «черный» (01010) и строки битов для атрибута «утка» (00110) с помощью операции КОНЪЮНКЦИЯ мы получим строку 00010, из которой следует, что записи о черных утках содержатся только в зоне 4 запоминающего устройства. Для нахождения всех нужных нам записей остается просмотреть зону 4.

8.3.11 ПАРАЛЛЕЛЬНЫЕ СЕКЦИОННЫЕ ИНВЕРТИРОВАННЫЕ СПИСКИ

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

100

дисков (рис. 8.10); возможно, при этом будет использована лишь небольшая часть цилиндров каждого устройства, так что остальные цилиндры могут содержать данные, организованные любым другим способом. На рис. 8.10 секциями, на которые в индексе содержатся ссылки, являются цилиндры, и в нескольких таких цилиндрах поиск может идти параллельно. Допустим, что нас интересуют синие слоны. Из индексной таблицы на рис. 8.10 следует, что в цилиндрах 3 и 253 содержатся одновременно элементы «синий» и «слон». Установку головок чтения — записи на нужные цилиндры можно произвести одновременно. Каждый цилиндр на рис. 8.10 имеет свой собственный индекс для ускорения поиска внутри цилиндра, так что нет необходимости просматривать все дорожки.

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

Рис.8.8

101

Рис.8.9