- •Предисловие
- •1. Основы информационного обеспечения процессов и систем
- •1.1. Понятие и содержание информационного обеспечения
- •1.2. Структура и классификация информационных систем
- •1.3. Система представления и обработки данных фактографических аис
- •Вопросы и упражнения
- •2. Системы управления базами данных фактографических информационных систем
- •2.1. Функции, классификация и структура субд
- •2.2. Модели организации данных
- •2.2.1. Иерархическая и сетевая модели организации данных
- •2.2.2. Реляционная модель организации данных
- •2.3. Внутренняя схема баз данных фактографических аис
- •2.3.1. Физические структуры данных
- •2.3.2. Индексирование данных
- •2.3.3. Расстановка (хеширование) записей
- •Вопросы и упражнения
- •3. Основы создания автоматизированных информационных систем
- •3.1. Общие положения по созданию автоматизированных систем
- •3.2. Проектирование банков данных фактографических аис
- •3.2.1. Концептуальное проектирование
- •3.2.2. Проектирование схем реляционных баз данных
- •3.2.2.1. Проектирование и создание таблиц
- •3.2.2.2. Нормализация таблиц
- •Вопросы и упражнения
- •4. Ввод, обработка и вывод данных в фактографических аис
- •4.1. Языки баз данных
- •4.2. Ввод, загрузка и редактирование данных
- •4.2.1. Ввод и редактирование данных в реляционных субд
- •4.2.2. Особенности ввода и загрузки данных в субд с сетевой моделью организации данных
- •4.3. Обработка данных
- •4.3.1. Поиск, фильтрация и сортировка данных
- •4.3.2. Запросы в реляционных субд
- •4.3.2.1. Запросы на выборку данных
- •4.3.2.1.1. Запросы на выборку данных из одной таблицы
- •4.3.2.1.2. Запросы на выборку данных из нескольких таблиц
- •4.3.2.1.3. Вычисления и групповые операции в запросах
- •4.3.2.2. Запросы на изменение данных
- •4.3.2.3. Управляющие запросы
- •4.3.2.4. Подчиненные (сложные) запросы
- •4.3.2.5. Оптимизация запросов
- •4.3.3. Процедуры, правила (триггеры) и события в базах данных
- •4.3.4. Особенности обработки данных в субд с сетевой моделью организации данных
- •4.4. Вывод данных
- •Вопросы и упражнения
- •5. Распределенные информационные системы
- •5.1. Понятие распределенных информационных систем, принципы их создания и функционирования
- •5.2. Технологии и модели «Клиент-сервер»
- •5.2.1. Модель файлового сервера
- •5.2.2. Модель удаленного доступа к данным
- •5.2.3. Модель сервера базы данных
- •5.2.4. Модель сервера приложений
- •5.2.5. Мониторы транзакций
- •5.3. Технологии объектного связывания данных
- •5.4. Технологии реплицирования данных
- •Вопросы и упражнения
- •6. Документальные информационные системы
- •6.1. Общая характеристика и виды документальных информационных систем
- •6.2. Информационно-поисковые каталоги и тезаурусы
- •6.2.1. Классификационные системы поиска документов
- •6.2.2. Координация понятий в классификационных системах
- •6.2.3. Информационно-поисковые тезаурусы
- •6.2.4. Автоматизация индексирования документов
- •6.3. Полнотекстовые информационно-поисковые системы
- •6.3.1. Информационно-технологическая структура полнотекстовых ипс
- •6.3.2. Механизмы поиска документов в полнотекстовых ипс
- •6.3.3. Методы количественной оценки релевантности документов
- •6.4. Гипертекстовые информационно-поисковые системы
- •6.4.1. Гипертекст
- •6.4.2. Структура, принципы построения и использования гипертекстовых ипс
- •6.4.3. Модель организации данных в гипертекстовых ипс
- •6.4.4. Формирование связей документов в гипертекстовых ипс
- •Вопросы и упражнения
- •7. Администрирование информационных систем и защита данных
- •7.1. Администрирование информационных систем
- •7.2. Разграничение доступа и защита данных
- •7.2.1. Понятие и модели безопасности данных
- •7.2.2. Технологические аспекты защиты информации
- •7.2.2.1. Идентификация и аутентификация
- •7.2.2.2. Языки безопасности баз данных
- •7.2.2.3. Безопасность повторного использования объектов
- •7.2.2.4. Надежное проектирование и администрирование
- •7.2.3. Требования и классы защищенности автоматизированных (информационных) систем в «Руководящих документах...» Государственной технической комиссии при Президенте рф
- •Вопросы и упражнения
- •Литература
- •Алфавитно-предметный указатель Содержание
2.3.2. Индексирование данных
Как уже отмечалось, стандартным приемом повышения эффективности доступа к записям в базах данных является создание индексных массивов по отдельным, обычно ключевым полям. Идея индексов основана на том факте, что если для повышения эффективности доступа к конкретному кортежу-записи использовать линейное упорядочение кортежей в таблице (скажем, по алфавиту для текстовых ключевых полей или по возрастанию для числовых ключевых полей), то накладные расходы по «перетряске» всей таблицы после добавления/удаления строк-кортежей превысят выигрыш во времени доступа. Структура индексов (индексных массивов) строится так, чтобы на основе некоторого критерия можно было бы быстро находить по значению индексируемого поля указатель на нужную запись (строку) таблицы и получать к ней доступ. При этом совокупность записей-кортежей базовой таблицы не обязательно упорядочивать, а при их изменении необходимо изменить только лишь индексный массив.
Как и для информационных массивов самих данных (таблиц), так и для индексных массивов применяются линейные и нелинейные структуры. В качестве линейных структур индексовв большинстве случаев выступают инвертированные списки.Инвертированный список строится по схеме таблицы с двумя колонками — «Значение индексируемого поля» и «Номера строк»* (см. рис. 2.16). Инвертированные списки чаще всего применяются для индексации полей, значения которых в разных строках-записях могут повторяться, к примеру, поле «Год рождения» таблицы «Сотрудники» (в реляционных базах данных такие поля не могут быть ключевыми).
* На практике не номера строк базовой таблицы, а номера страниц файла БД, где находится соответствующая строка.
Значение индексируемого поля ("Год рождения") |
Номера, строк |
1958 |
3 |
1959 |
5, 17, 123, 256 |
1960 |
31, 32, 77 |
1961 |
11, 45, 58, 167, 231 |
1962 |
7, 8, 9, 10, 234, 235, 236 |
Рис. 2.16. Пример инвертированного списка
Строки инвертированного списка упорядочиваются по значению индексируемого поля. Для доступа к нужной строке исходной таблицы сначала в упорядоченном инвертированном списке отыскивается строка с требуемым значением поля,* затем считывается номер соответствующей строки (строк) в исходной таблице и далее по нему уже осуществляется непосредственный доступ к искомой строке базовой таблицы.
* Способы поиска в линейно упорядоченных структурах см., например, в работе: Вирт Н.. Алгоритмы и структуры данных: Пер. с англ.—М.: Мир, 1989.
При добавленииновой строки в базовую таблицу ее значение по индексируемому полю ищется в ранее составленном индексе. Если соответствующая строка инвертированного списка отыскивается (т.е. подобное значение индексируемого поля среди строк таблицы уже встречалось и было поставлено на учет), то в ячейку второго столбца соответствующей строки индекса дописывается номер страницы, куда была помещена соответствующая строка базовой таблицы. Если такого значения в индексе нет, то создается новая строка индекса и осуществляется переупорядочение нового состояния индексного массива.
При удалениистроки из базовой таблицы также осуществляется поиск соответствующей строки в индексном массиве и осуществляется вычеркивание в индексе соответствующего номера отсылаемой строки базовой таблицы. Если при этом других строк в базовой таблице с таким же значением индексируемого поля не осталось (соответствующая ячейка индекса стала пустой), то удаляется и вся данная строка индекса с последующим переупорядочением всего индексного массива. При этом за счет того, что индекс в виде инвертированного списка содержит лишь один столбец значений, затраты на «перетряску» при добавлении или удалении записей существенно меньше по сравнению с тем, если бы переупорядочение происходило непосредственно в самой базовой таблице.*
* Кроме того, строки базовой таблицы можно упорядочивать только лишь по какому-либо одному полю, а индексные массивы можно создавать сразу по нескольким полям.
Индексы в виде инвертированных списков являются особенно эффективными в том случае, когда значения индексируемого поля часто повторяются, образуя равномерные по мощности группы. В этом случае количество ситуаций, при которых требуется добавление или удаление строк индекса, невелико, и затраты на переупорядочение индекса при изменениях данных в базовой таблице незначительны. В результате выигрыш по затратам на доступ существенно превышает накладные расходы по переупорядочению индекса в процессе ведения базы данных.
Нелинейные структуры индексовприменяются для создания индексных массивов ключевых полей или тех полей, значения по которым не повторяются. При организации индексов в таких случаях чаще всего используются уже упоминавшиеся древовидные иерархические структуры в видеБ-деревьев. Б-дерево представляет собой корневое сбалансированное сильно ветвистое дерево.
Каждая внутренняя вершина, если она полностью заполнена, содержит информацию о n–1 различных последовательно возрастающих значениях индексируемого поля по следующей схеме, приведенной на рис. 2.17.
где: Хi – i-езначение индексируемого поля, при этом ХiJXi+1 –указатель на вершину, содержащую значения индексируемого поля, меньшие или равныеXi.
Рис. 2.17. Структура внутренней вершины Б-дерева
Число nназываетсяпорядкомБ-дерева.
Листовая вершина, в отличие от внутренней, содержит информацию о нахождении страницы в файле базы данных с записями-кортежами, имеющими соответствующие значения индексируемого поля. Схема листовой страницы представлена на рис.2.18.
где: Рk–указатель на страницу файла данных, содержащую строку (строки) со значением индексируемого поля, равнымХk.
Рис. 2.18. Структура листовой вершины Б-дерева
СбалансированностьБ-дерева означает одинаковое количество потомков до листовой вершины по любым разветвлениям от корневой вершины. В качестве примера на рис. 2.19 приведено Б-дерево 3-го порядка уровня 2, построенное для поля «Год рождения» таблицы «Сотрудники».
Рис. 2.19. Пример Б-дерева 3-го порядки уровня 2
Как правило, порядок Б-дерева выбирается таким, чтобы информация одной полностью заполненной вершины соответствовала странице файла данных. В силу того что объем одной страницы файлов данных существенно больше размера полей, то в большинстве случаев в одну полностью заполненную страницу вместе с указателями помещается большое количество значений индексируемого поля, исчисляемое сотнями и даже тысячами значений (n >> 100...1000). Это обстоятельство обусловливает сравнительно небольшой уровень Б-деревьев на практике (порядка 2...4) даже в тех случаях, когда количество строк в базовой таблице исчисляется десятками тысяч. В результате доступ к нужной записи по определенному значению индексируемого поля через Б-дерево осуществляется за небольшое количество страничных обменов между внутренней и внешней памятью по следующему алгоритму:
— в оперативную память из внешней считывается страница с корневой вершиной и последовательно просматривается до первого значения, превышающего значение индексируемого поля нужной записи. При этом определяется ссылка (номер) страницы-потомка (внутренней или листовой);
— в оперативную память считывается страница-потомок. Если она внутренняя, то ее обработка производится аналогично корневой. Если страница-потомок является листовой, то она последовательно просматривается до нахождения нужного значения индексируемого поля. При этом определяется номер страницы файла данных, которая содержит нужную запись;
— если при просмотре листовой страницы нужное значение индексируемого поля не находится, то поиск считается отрицательным, т. е. принимается решение о том, что строки-кортежа с требуемым значением индексируемого поля в таблице-отношении (файле данных) нет.
Анализ данного алгоритма показывает, что при поиске нужного значения индексируемого поля по индексу в виде Б-дерева требуется такое количество страничных обменов между внешней и внутренней памятью, которое равно уровню Б-дерева плюс единица. При достаточно большом значении n, а это, как уже отмечалось, наиболее распространенная ситуация, уровеньmБ-дерева невелик (m >> 2..3),и, следовательно, количество страничных индексных обменов с памятью также невелико. При этом сбалансированность Б-дерева обусловливает одинаковые затраты по доступу к любой записи с любым значением индексируемого поля.СбалансированностьБ-деревьев обеспечивается легко алгоритмизируемым правилом их построения (роста) при включении нового значения индексируемого поля.
Включениенового значения индексируемого поля осуществляется следующим образом.
• Производится поиск требуемого значения в существующем Б-дереве. При его отсутствии поиск, естественно, заканчивается отрицательным результатом, но в оперативной памяти остается листовая страница, куда, следовательно, и необходимо поместить новое значение индексируемого поля.
• Если листовая страница не заполнена полностью, в нее записывается новое значение индексируемого поля и указатель на страницу файла данных, содержащую соответствующую запись (строку таблицы).
• Если листовая страница уже заполнена, то она делится «пополам», и тем самым порождается новая листовая страница. Среднее значение исходной листовой страницы записывается в вершину-предок на соответствующее место.*При этом после вставленного значения образуется указатель-ссылка на новую листовую страницу, образованную остатком от ополовиненной исходной листовой страницы.
*Так, чтобы в странице обеспечивался последовательный порядок расположения -значений индексируемого поля по схеме, приведенной на рис. 2.17.
• Если при занесении среднего значения переполненной листовой страницы в страницу-предок происходит переполнение самой страницы-предка, то она аналогично делится пополам, «посылая» свое среднее значение своему предку. Если при этом происходит переполнение корневой страницы, то она также делится на две новые внутренние страницы, а ее среднее значение образует новую корневую страницу, повышая уровень дерева на единицу и т. д. (говорят, что Б-дерево «растет» вверх).
Удалениеопределенного значения индексируемого поля производится следующим образом:
• Производится поиск требуемого значения индексируемого поля и в результате в оперативную память считывается нужная листовая страница.
• Из нее удаляется соответствующее значение индексируемого поля и указатель-адрес соответствующей страницы файла данных.
• Если после удаления размер занятого пространства памяти текущей листовой страницы в сумме с размером занятого пространства левого (правого) брата больше, чем размер памяти одной страницы, то процесс заканчивается.
• В противном случае текущая листовая страница объединяется с левым (правым) братом. Тем самым одна из листовых страниц (левая или правая) опустошается и уничтожается. В вершине-предке удаляется значение индексируемого поля, указатель перед которым или после которого ссылался на опустошенную листовую страницу. При этом может, в свою очередь, возникнуть необходимость слияния и опустошения уже внутренних страниц, которое осуществляется аналогичным образом.
Описанный алгоритм удаления значений индексируемого поля соответствует одной из наиболее широко применяемых разновидностей Б-деревьев—Б*-деревьев,которые позволяют использовать в среднем до 2/3 пространства всех страниц (вершин) дерева.
Структура Б-деревьев является эффективным способом индексации больших массивов данных и широко применяется в современных СУБД.