- •Базы данных, знаний и экспертные системы
- •1.1 Достоинства централизованного управления.
- •1.2 Цели использования БД
- •1.3 Многоуровневая структура БД.
- •1.3.1 Обобщенный алгоритм работы СУБД
- •2 Физический уровень. Требования. Размещение. Сжатие
- •2.1 Введение
- •2.2 Возможные представления данных
- •2.3 Интерфейс физических записей: методы индексирования
- •2.4 Общие методы индексирования
- •3 ИНДЕКСНО-ПОСЛЕДОВАТЕЛЬНАЯ ОРГАНИЗАЦИЯ
- •3.1.1 ПОСЛЕДОВАТЕЛЬНАЯ ИЛИ ПРОИЗВОЛЬНАЯ ОБРАБОТКА?
- •3.1.2 ВЕДЕНИЕ ФАЙЛА
- •3.1.3 СВЯЗЬ С ТЕХНИЧЕСКИМ ОБЕСПЕЧЕНИЕМ
- •3.1.5 МНОГОУРОВНЕВОЕ ИНДЕКСИРОВАНИЕ
- •3.1.6 ВИРТУАЛЬНЫЙ МЕТОД ДОСТУПА (VSAM)
- •3.1.7 ВКЛЮЧЕНИЕ И УДАЛЕНИЕ ЗАПИСЕЙ
- •4 ОРГАНИЗАЦИЯ ОБЛАСТИ ПЕРЕПОЛНЕНИЯ
- •4.1 РАСПРЕДЕЛЕННАЯ СВОБОДНАЯ ПАМЯТЬ
- •4.2 РАСЩЕПЛЕНИЕ ПАМЯТИ
- •4.2.1 РАЗМЕЩЕНИЕ ИНДЕКСОВ
- •5 Алгоритмы перемешивания
- •5.1 ФАКТОРЫ, ВЛИЯЮЩИЕ НА ЭФФЕКТИВНОСТЬ ПЕРЕМЕШИВАНИЯ
- •5.1.1 РАЗМЕР УЧАСТКА ЗАПИСЕЙ
- •5.1.2 ПЛОТНОСТЬ ЗАПОЛНЕНИЯ
- •5.2 АЛГОРИТМЫ ПЕРЕМЕШИВАНИЯ
- •5.2.1 Метод квадратов
- •5.2.2 Деление
- •5.2.3 .Сдвиг разрядов
- •5.2.4 Складывание
- •5.2.5 . Анализ отдельных разрядов ключа
- •5.2.6 . Преобразование основания системы счисления
- •5.2.7 . Метод Лина
- •5.2.8 . Деление полиномов
- •5.3 ВЫБОР АЛГОРИТМА ПЕРЕМЕШИВАНИЯ
- •5.4 ЗАМЕЧАНИЯ ПО РЕАЛИЗАЦИИ АЛГОРИТМОВ ПЕРЕМЕШИВАНИЯ
- •5.4.1 РАЗМЕЩЕНИЕ ЗАПИСЕЙ В ОБЛАСТИ ПЕРЕПОЛНЕНИЯ
- •5.4.2 ОПТИМИЗАЦИЯ
- •6.1 Физическое представление древовидных структур
- •6.1.1 Усложненный двумерный файл
- •6.1.2 ГЛАВНЫЙ И ДЕТАЛЬНЫЙ ФАЙЛЫ
- •6.1.3 МНОГОУРОВНЕВЫЕ ДЕРЕВЬЯ
- •6.1.4 Метод 1. Физически последовательное размещение
- •6.1.5 Метод 2. Левосписковые структуры с переполнениями
- •6.1.6 Метод 3. Левосписковые структуры с распределенной свободной памятью
- •6.1.7 ПОСЛЕДОВАТЕЛЬНЫЕ ФАЙЛЫ
- •6.1.8 Метод 4. Множественные указатели на порожденные записи
- •6.1.9 Метод 5. Указатели на подобные и порожденные записи
- •6.1.10 УКАЗАТЕЛИ НА ИСХОДНЫЕ ЗАПИСИ
- •6.1.11 Метод 6. Кольцевые структуры
- •6.1.12 ВКЛЮЧЕНИЕ И УДАЛЕНИЕ ЗАПИСЕЙ
- •6.1.13 Метод 7. Справочники деревьев
- •6.1.14 Метод 8. Битовые отображения
- •6.1.15 СМЕШАННЫЕ МЕТОДЫ
- •6.2 Физическое представление сетевых структур
- •6.2.1 ФИЗИЧЕСКИ ПОСЛЕДОВАТЕЛЬНОЕ РАЗМЕЩЕНИЕ
- •6.2.2 ВСТРОЕННЫЕ УКАЗАТЕЛИ
- •6.2.3 СЛОЖНЫЕ СЕТЕВЫЕ СТРУКТУРЫ
- •6.2.4 МНОГОУРОВНЕВЫЕ СЕТЕВЫЕ СТРУКТУРЫ
- •6.2.5 СПРАВОЧНИКИ
- •6.2.6 БИТОВЫЕ ОТОБРАЖЕНИЯ
- •7 . Построение индекса
- •7.1 ОПЕРАЦИИ ПОИСКА
- •7.2 ФОРМЫ ПРЕДСТАВЛЕНИЯ ФУНКЦИИ
- •7.2.1 Адрес записи
- •7.2.2 Относительный адрес записи
- •7.2.3 Символический адрес записи
- •7.2.4 Адрес размещения участка записей
- •7.2.5 Адрес цепи
- •7.2.6 Значения атрибута
- •7.2.7 Несколько выходов
- •7.3 ФУНКЦИИ С КОНЕЧНЫМ ЧИСЛОМ ЗНАЧЕНИЙ
- •7.4 ИНДЕКС С НЕСКОЛЬКИМИ ФУНКЦИЯМИ
- •7.4.1 АРГУМЕНТ
- •7.5 КАКИЕ АТРИБУТЫ СЛЕДУЕТ ИНДЕКСИРОВАТЬ?
- •7.6 СЖАТИЕ КЛЮЧА
- •8 Поиск по нескольким ключам
- •8.1 Первичный и вторичный ключ
- •8.2 Пример БД с несколькими ключами
- •8.3 РАЗМЕЩЕНИЕ ЗАПИСЕЙ НА ФИЗИЧЕСКИХ НОСИТЕЛЯХ ДАННЫХ
- •8.3.1 ЗАПИСИ, СВЯЗАННЫЕ В ЦЕПЬ
- •8.3.2 ФАЙЛ С НЕСКОЛЬКИМИ ВТОРИЧНЫМИ КЛЮЧАМИ
- •8.3.3 СЧЕТЧИК ДЛИНЫ ЦЕПИ
- •8.3.4 МУЛЬТИСПИСКОВАЯ ОРГАНИЗАЦИЯ
- •8.3.5 ОРГАНИЗАЦИЯ ФАЙЛА И АППАРАТНОЕ ОБЕСПЕЧЕНИЕ
- •8.3.6 СЕКЦИОННЫЕ ЦЕПИ
- •8.3.7 ПАРАЛЛЕЛЬНЫЕ СЕКЦИОННЫЕ ЦЕПИ
- •8.3.8 ИНВЕРТИРОВАННЫЕ СПИСКИ
- •8.3.9 КОСВЕННЫЙ ИНДЕКС
- •8.3.10 СЕКЦИОННЫЕ ИНВЕРТИРОВАННЫЕ СПИСКИ
- •8.3.11 ПАРАЛЛЕЛЬНЫЕ СЕКЦИОННЫЕ ИНВЕРТИРОВАННЫЕ СПИСКИ
- •8.3.12 ПАРАЛЛЕЛЬНЫЕ ОПЕРАЦИИ ПОИСКА
- •8.3.13 ЦЕПИ В ИНДЕКСЕ
- •9 . Датологический уровень. Сетевая модель
- •9.1 ПРОСТЫЕ И СЛОЖНЫЕ СЕТЕВЫЕ СТРУКТУРЫ
- •9.2 ДАННЫЕ ПЕРЕСЕЧЕНИЯ
- •9.2.2 ЦИКЛЫ
- •9.2.3 ПЕТЛИ
- •9.2.4 ПРИВЕДЕНИЕ СЕТЕВЫХ СТРУКТУР К БОЛЕЕ ПРОСТОМУ ВИДУ
- •9.2.5 Категории схем
- •10 . Иерархическая модель данных
- •10.1 . ДЕРЕВЬЯ
- •10.1.1 СБАЛАНСИРОВАННЫЕ И ДВОИЧНЫЕ ДЕРЕВЬЯ
- •10.1.2 ПРОСТОЕ И СЛОЖНОЕ ОТОБРАЖЕНИЕ
- •10.1.3 ИЕРАРХИЧЕСКИЕ ФАЙЛЫ
- •10.1.4 НАБОРЫ CODASYL
- •10.1.5 ОДНОРОДНЫЕ СТРУКТУРЫ
- •10.1.6 ЗАВИСИМОСТЬ ОТ ПУТИ
- •11 .Реляционная модель данных.
- •11.1 . Элементы теории множеств
- •11.1.1 Множества
- •11.2 . Операции над множествами
- •11.2.1 Декартово произведение множеств
- •11.3 . Отношение
- •11.4 . Примеры отношений
- •11.4.1 Бинарные отношения (отношения степени 2)
- •11.4.2 Отношение эквивалентности
- •11.4.3 Отношения порядка
- •11.4.4 Функциональное отношение
- •11.4.5 Еще пример бинарного отношения
- •11.4.7 Транзитивное замыкание отношений
- •11.5 . Выводы
- •12 . Базовые понятия реляционной модели данных
- •12.1 . Общая характеристика реляционной модели данных
- •12.2 . Типы данных
- •12.2.1 Простые типы данных
- •12.2.2 Структурированные типы данных
- •12.2.3 Ссылочные типы данных
- •12.3 . Типы данных, используемые в реляционной модели
- •12.3.1 Домены
- •12.4 . Отношения, атрибуты, кортежи отношения
- •12.4.1 Определения и примеры
- •12.4.2 Свойства отношений
- •12.5 . Первая нормальная форма
- •12.6 . Выводы
- •13 . Элементы модели "сущность-связь"
- •13.4 . Выводы
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
