Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Структурный подход к организации баз данных

..pdf
Скачиваний:
4
Добавлен:
12.11.2023
Размер:
14.79 Mб
Скачать

а)

5)

Рис. 9.6. Рациональный выбор между памятью и временем:

а) предоставляются три пути; б)

предоставляется единственный путь

обычно состоит из двух типов записей: долговременных, остающихся в базе данных длительное время, и кратковременных с коротким жизнен­ ным циклом. Записи базы данных о ЗАКАЗЧИКАХ, СТУДЕНТАХ и СЧЕТАХ обычно относятся к типу долговременных, в то время как записи о НАКЛАДНЫХ и ОРДЕРАХ — к типу кратковременных. Кратковременными, как правило, являются часто обновляемые записи. Если указатели размещаются в кратковременных записях, то при удалении записей указатели пропадают в отличие от указателей в долговременных записях (рис. 9.7).

Рис. 9.7. Указатели, размещаемые в записях с кратковременным хранением, сопровож­ дать значительно труднее, чем указатели долговременного типа записей

з)

Не пренебрегайте обработкой в автономном режиме. При больших

объемах

данных обработка в автономном режиме может оказаться

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

9.2.3. СУБД, использующие инвертированные файлы

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

Хорошим примером подобной организации может служить файл, со­ держащий информацию о полетах самолетов. Атрибуты этого файла — номер рейса, дата вылета, пункт вылета и аэропорт, время вылета, пункт назначения и аэропорт, а также время прибытия. Первичным ключом здесь является номер рейса и дата вылета. Запись с определенны­ ми значениями номера рейса и даты вылета только одна, но для рейсов с пунктом назначения Нью-Йорк записей может быть несколько. Возможно, пассажиру захочется узнать номера всех рейсов из Сан-Фран­ циско в Нью-Йорк в течение трех дней. Спецификация искомых записей, содержащая определенные значения определенных атрибутов, называется запросом. СУБД, использующие инверсию файлов, вероятнее всего, наилучшим образом приспособлены к работе в оперативной ориентиро­ ванной на запросы среде.

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

Перечислим основные вопросы, на которые необходимо ответить при проектировании физической модели для СУБД, основанной на ин­ вертированных файлах. При этом воспользуемся терминологий АОАВА5, рассмотренной в гл. 8.

1. Что можно сказать относительно дублирования данных и их избыточнос­ ти? Главный вопрос, на который требуется ответить, состоит в том, когда и как дублировать данные и когда и как избегать их избыточности. Технические средства АОАВА5, имеющие отношение к вопросу о дубли­ ровании данных, предусматривают использование:

многозначных полей;

периодических групп;

нескольких типов записей в файле;

нескольких файлов для хранения данных.

М н о г о з н а ч н ы е поля. Применяя многозначные поля, можно избежать дублирования. Пусть множество элементов данных «Детали заказчику» для ЗАКАЗЧИКА повторяется для одного элемента «Номер счета». При размещении пары ЗАКАЗЧИК-СЧЕТ в отдельной записи имеет место значительное дублирование данных:

Детали заказчику

Номер счета

Детали заказчику

Номер счета

Детали заказчику

Номер счета

Если для номера счета используемся многозначное поле, эти записи для одного и того же заказчика сживаются в одну запись:

Детали заказчику

Номер счета

Номер счета

Нрмер счета

П е р и о д и ч е с к и е г руппы. Если бы у нас имелся набор элементов данных «Счет за детали», то для счета мы могли бы использовать периодическую группу. Три записи:

Номер заказчика

Счет за детали

Номер заказчика

Счет за

детали

Номер заказчика

Счет за

детали

оказались бы сжатыми в одну:

Номер заказчика Счет за детали Счет за детали Счет за детали

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

Н е с к о л ь к о т и п о в з а п и с е й в файле . Иногда полезно уста­ навливать структуру записи, используя один файл для нескольких типов записей. Пусть три записи до разбиения имели вид:

Номер заказчика

Детали

заказчику

Счет за детали

Номер заказчика

Детали

заказчику

Счет за детали

Номер заказчика

Детали

заказчику •

Счет за детали

Зададим два типа записей в одном файле следующим образом:

Номер заказчика

Детали заказчику

СПП

Счет за детали

Номер заказчика

СПП

Детали заказчику

Счет за детали

(СПП — счетчик пустого поля)

 

 

 

Экземпляры записей будут такие:

 

 

 

 

 

 

 

1

Номер заказчика

Детали заказчику

СПП

 

Номер заказчика

СПП

Счет за детали

 

Номер заказчика

СПП

Счет за детали

 

Номер заказчика

СПП

Счет за детали

 

____________________ _ 1 -

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

Номер заказчика

Детали заказчику

Счет за детали

Номер заказчика

Детали заказчику

Счет за детали

Номер заказчика

Детали заказчику

Счет за детали

После разделения одного файла на два записи таковы:

Номер заказчика

Детали заказчику

Файл 1

 

 

(ЗАКАЗЧИК)

Номер заказчика

Счет за детали

 

Номер заказчика

Счет за детали

— Файл 2

 

 

(СЧЕТ)

Номер заказчика

Счет за детали

 

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

Аргументы в пользу увеличения числа файлов:

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

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

Аргументы против увеличения числа файлов таковы:

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

может возникнуть необходимость в попарном связывании файлов для использования критериев поиска по нескольким файлам. Попар­ ное связывание требует выделения дополнительной памяти на диске

и дополнительных накладных расходов при выполнении подпрограмм* обновления.

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

На данном этапе после выявления плоских файлов рекомендуется разработать структуры физических записей. При этом необходимо при­

нимать во внимание следующее.

 

2.

Какие атрибуты нужно инвертировать, т. е. какие поля должны опреде­

ляться как

дескрипторы (ключи)? Это один

из основных вопросов,

от

решения

которого зависит обеспечение

широких возможностей

обработки запросов. Однако хранение каждого дескриптора требует выделения поля в инвертированном списке ассоциатора (гл. 8) и процес­ сорного времени на его обновление. Определение дескрипторов необходимо только там, где оно вполне обосновано требованиями поиска.

Рекомендации для определения дескрипторов:

Возможно объединение всегда использующихся вместе дескрипторов в один супердескриптор. Поиск может проводиться путем задания

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

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

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

• Дескрипторы не должны принимать неиспользуемые значения.

Вчастности, следует исключить «пустые» значения.

Дескрипторам с небольшим числом значений и дескрипторам, прини­ мающим определенное значение в большинстве записей, в ассоциаторе соответствуют длинные списки 15Ы (внутренних последовательных номеров). Поиск по этим дескрипторам затруднен. Лучшие дескрип­ торы обеспечивают однозначную идентификацию записей.

Необходимо избегать такого выбора дескрипторов, при котором ин­ вертированный список сам может превратиться в крупную базу данных. Также следует избегать применения дескрипторов с небольшим «охва­ том» после инвертирования. Например, возможно существование файла с дескриптором — «пол». Дескриптор может принимать только два значения: «женский» и «мужской». Ему соответствует довольно длинный инвертированный список, при однозначной выборке почти не дающий выигрыша.

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

3.Сколько полей не дескрипторов должно быть определено? Число полей в записи влияет на время, требуемое центральному процессору для обработки команд.

Если два или более полей всегда обрабатываются вместе, определе­ ние их как единого поля повышает эффективность. Следует рассмот­

реть возможность объединения небольших последовательных полей.

Не храните данные, которые можно получить без особых усилий. Если значение поля V — простая функция поля X, то не храните поле V, а получайте его значение программным способом, например, «дата конца семестра = дата начала семестра + 100 дней».

4. Как следует упорядочивать поля? Порядок определения полей в записи

может влиять на время, необходимое центральному процессору на обработку.

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

Определяйте поля в той последовательности, в которой они запра­ шиваются областью основной обработки.

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

5.Какой объем свободной памяти необходимо отвести во время загрузки файла? Чему следует уделить внимание собственно при загрузке файла?

Свободная память, отводимая во время загрузки, влияет не только на

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

Для файлов, в которых часто

выполняется операция обновления,

 

что приводит к росту длины записей, задают большую свободную

 

память. И наоборот, для относительно статичных файлов распределяет­

 

ся меньше свободной памяти.

 

 

 

 

При хранении данных записи следует физически упорядочивать по

 

значению поля дескриптора, наиболее часто применяемого для обработ­

 

ки. Загрузка записей в такой последовательности сокращает число

 

операций ввода-вывода, используемое время и время работы цент­

6.

рального процессора при логически последовательной обработке.

Как следует

организовать инвертированный список

и управлять им

в памяти?

 

 

 

 

 

Если инвертированный список организован в виде обычного после­

довательного

файла, потенциальное

преимущество

инвертирования

в

значительной степени теряется.

В

крупных базах

данных работа

синвертированными списками может сама по себе представлять проблему.

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

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

1)функции СУБД;

2)характеристики устройств прямого доступа;

3)прикладные программы.

9.3. ОЦЕНКА ФИЗИЧЕСКОЙ МОДЕЛИ

Оценка физической модели до реализации базы данных и разра­ ботки прикладных программ представляется необходимым условием проектирования. В §9.2 были рассмотрены некоторые возможности выбора при переходе от логической модели к физической. Поскольку существуют возможности выбора, возможно и существование альтернативных физических моделей, подлежащих оценке. Основные оцениваемые пара­ метры — память и время. В данном случае упор делается на «проверку за столом».

Часто облегчают сравнение альтернатив вычисления, проводимые

сцелью получения ответа на два вопроса:

1.Сколько существует экземпляров каждого типа сегмента или типа записи?

2.Киков средний размер записи базы данных и как велика база данных?

Поскольку одним из факторов, влияющих на время, является число операций физического ввода-вывода, необходимых для выполнения оператора САББ, проектировщик должен знать, какова вероятность того, что два сегмента находятся в различных блоках или управляющих интервалах. На основе этой вероятности и образцов операторов САББ прикладных программ проектировщику надлежит провести грубую оценку времени. Мы не рассматриваем базу данных, которая уже была когда-то загружена. Такая база данных в зависимости от ее изменчивости может состоять из нескольких фрагментированных областей памяти, некоторые удаленные из нее части записей могут по-прежнему занимать физическую память и т. д. Нас интересует вновь загруженная или реорганизованная база данных. Указанные выше основные сведения о базе данных также обеспечивают обычные дополнительные преимущества программирован­ ного подхода — согласованный ввод, согласованный вывод и хорошую документацию.

9.3.1. Оценка памяти

Оценка физической модели может проводиться только после подроб­ ного ознакомления с конкретной СУБД. Допустим, что предложено исполь­ зовать 1М5. Однако метод оценки памяти, так же как и метод оценки вре­ мени, может применяться и для большинства других СУБД. На этом этапе проектирования не обязательно точно знать объем всей необходимой памя­ ти с прямым доступом. Как правило, достаточно рассмотреть только хранение сегментов. Поэтому мы не будем подсчитывать объем памяти, требуемой для хранения индексов, которые необходимы методам доступа.

При анализе проекта базы данных с помощью описанного ниже метода «карандаша и бумаги» принимаются следующие допущения: 1) все базы данных таковы, какими они были в момент начальной загруз­ ки или сразу после реорганизации;

2)размеры сегментов малы по сравнению с размерами блоков;

3)частоты появления экземпляров порожденных сегментов относительно

исходного в базе данных есть независимые случайные величины;

4)сегменты имеют фиксированную длину;

5)если противное не оговорено особо, частотное распределение порож­ денных сегментов под исходным постоянно;

6)записи базы данных с явно различающимися экземплярами сегментов не обрабатываются; в модели они должны быть представлены отдельно;

7)оценки числа операций ввода-вывода помогают проектировщику преобразовывать обращения к сегментам в операции ввода-вывода.

Однако преобразование операторов САББ языка

в обращения к сег­

ментам должно задаваться

на уровне внешних

моделей (называемых

в случае 1М5 логическими

базами данных) на

основании внутренней

модели (называемой в случае 1М5 физической базой данных).

Анализ проекта базы данных включает оценку памяти и изучение характеристик ввода-вывода (рис. 9.8). Зная характеристики ввода-вы- да, образцы вызовов и длину пути к устройству (т. е. число команд,

Рис. 9.8. Эксплуатационные характеристики языка ЭЬ/1. Язык ЭЬ/1 состоит из компонента управления базой данных и языка манипулирования данными 1М5. В 1М5 внешняя мо­ дель называется логической базой данных

которые необходимо выполнить для выполнения САЫД, можно получить количественные оценки эксплуатационных характеристик языка ОЬ/1 (язык данных/1 состоит из компонента управления базой данных и языка манипулирования данными 1М5).

Для оценки памяти необходимо прежде всего ответить на вопросы: 1. Какова иерархия? (В СУБД КОДАСИЛ необходимо знать, как по­ строены наборы.)

2. Какова длина каждого типа сегмента? Здесь имеется в виду не только длина собственно данных, но и длина области, занимаемой указателями. Допускается использование физических и логических указателей, напри­ мер физически порожденный первый, физически порожденный последний, физически подобный прямой, логически порожденный первый, логически порожденный последний и логически исходный. (В СУБД КОДАСИЛ возможные указатели ЫЕХТ (СЛЕДУЮЩИЙ), РЩОК (ПРЕДЫДУ­ ЩИЙ), ОАУЫЕК (ВЛАДЕЛЕЦ) и т. д.)

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

Зная эти факторы, проектировщик может определить

средний размер физической записи базы данных в байтах;

размер базы данных.

В 1М5 основной моделью данных является иерархическая древовид­ ная структура. Дерево состоит из нескольких поддеревьев. Поскольку иерархическая структура — это «нисходящее» дерево, мы будем обходить его снизу вверх. Поддерево сегмента А(5а) определяется как один экземп­ ляр А и экземпляры всех его порожденных. Поэтому размер поддерева А(5А) есть длина собственно А и сумма длин его порожденных.

Память, которая должна быть выделена на устройстве прямого доступа, определяется числом БАЙТОВ В СЕГМЕНТАХ. Его подсчет основан на понятии поддерева.

На рис. 9.9 представлены 2000 экземпляров сегмента А, и для каждого

=<577

 

 

 

 

Г* =5

 

 

 

 

Рис. 9.9. Оценка среднего размера записи физической базы данных:

I- — длина сегмента, включая префикс;

экземпляра

сегмента на экземпляр

Р — относительная частота

появления

его исходного;

экземпляр

сегмента и

все экземпляры порож­

5 — размер поддерева (один

денных им сегментов).

 

 

 

Подсчет ведется снизу вверх.

 

 

 

5в = 30,

= 15,

5а =1000+(5х 5в) +

(50х5с) = 1000

экземпляра сегмента А в среднем по 5 экземпляров сегмента В и по 50 эк­ земпляров сегмента С. При обходе снизу вверх получим:

5В (поддерево В) =30,

Зс (поддерево С) = 15 и

3 А (поддерево А) = 1000.

На рис. 9.10 показано определение размера поддерева изолирован-

Рис. 9.10. Определение размера поддерева любого изолированного типа сегмента X:

Ь — длина сегмента, включая префикс;

экземпляра

сегмента

на

экземпляр его

Р — относительная частота появления

исходного.

 

 

 

 

Размер поддерева сегмента X: 5х = Ьх +

(Р ^ З ^ +

2 Х32)

+

. . . 4- (РыXЗы)

Соседние файлы в папке книги