Глава 5

 

ТЕХНОЛОГИИ ДОСТУПА К ДАННЫМ.

ФАЙЛОВЫЕ СИСТЕМЫ И БАЗЫ ДАННЫХ

 

В истории вычислительной техники можно проследить две основные области ее применения:

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

•  вторая область использования вычислительной техники — в автоматических или автоматизированных информаци­онных   системах   возникла несколько позже первой. Это связано с тем, что вначале возможности компьютеров по хранению информации были очень ограниченными.

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

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

 

5.1 Файловые системы

 

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

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

 

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

Структуры файлов

 

Прежде всего, практически во всех современных компьюте­рах основными устройствами внешней памяти являются маг­нитные диски с подвижными головками, и именно они служат для хранения файлов [24, 25, 31]. Магнитные диски представляют собой пакеты магнитных пластин (платтеров), между которыми на одном рычаге двигается пакет магнитных головок. Шаг движения пакета головок является дискретным, и каждому положению пакета головок логически соответствует цилиндр магнитного диска. На каждой поверхности цилиндр «высекает» дорожку, так что каждая поверхность содержит число дорожек, равное числу цилиндров. При разметке магнитного диска (специальном действии, предшествующем использованию диска) каждая дорожка размечается на одно и то же количество блоков таким образом, что в каждый блок можно записать по максимуму одно и то же число байтов. Таким образом, для выполнения обмена с магнитным диском на уровне аппаратуры нужно указать номер цилиндра, номер поверхности, номер блока на со­ответствующей дорожке и число байтов, которое нужно записать или прочитать от начала этого блока.

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

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

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

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

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

 

Идентификация файлов

 

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

Известны два базовых варианта:

•  поддержание изолированных файловых систем.   Во  многих системах управления файлами требуется, чтобы каждый ар­хив файлов (полное дерево справочников) целиком распо­лагался на одном дисковом пакете (или логическом диске разделе физического дискового пакета, представляемом с помощью средств операционной системы как отдельный диск). В этом случае полное имя файла начинается с имени дискового устройства, на котором установлен соответст­вующий диск. Такой способ именования используется в файловых системах фирмы DEC, очень близко к этому на­ходятся и файловые системы персональных компьютеров;

•  полностью  централизованная  файловая  система.   Впервые была реализована в операционной системе Multics. В фай­ловой системе Miltics пользователи представляли всю сово­купность каталогов и файлов как единое дерево. Полное имя  файла  начиналось  с  имени   корневого  каталога, и пользователь не обязан был заботиться об установке на дисковое устройство каких-либо конкретных дисков. Сама система, выполняя поиск файла по его имени, запрашива­ла оператора об установке необходимых дисков.

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

Компромиссное решение применено в файловых системах ОС UNIX. На базовом уровне в этих файловых системах поддержи­ваются изолированные архивы файлов. Один из этих архивов объявляется корневой файловой системой. После запуска систе­мы можно смонтировать корневую файловую систему и ряд изо­лированных файловых систем в одну общую файловую систему-Технически это производится с помощью создания в корневой файловой системе специальных пустых каталогов. Специальная команда (системный вызов) mount ОС UNIX позволяет подключить к одному из этих пустых каталогов корневой каталог указанного архива файлов. После монтирования общей файловой системы именование файлов производится так же, как если бы она с самого начала была централизованной.

 

Защита  файлов

 

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

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

 

Режим многопользовательского доступа

 

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

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

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

 

Области использования файлов

 

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

Файлы с текстами программ являются входными параметра­ми компиляторов, которые, в свою очередь, формируют файлы, содержащие объектные модули  [9]. С точки зрения файловой  системы,  объектные файлы также обладают абсолютно стандартной структурой — это последовательности записей или байтов. Система программирования накладывает на эту структуру более сложную и специфичную для этой системы структуру

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

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

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

В табл. 5.1 приведены типичные команды обращения к фай­ловым системам, характерные для различных ОС.

 

 

Файловая система NTFS

 

Структура файловой системы. Как и любая другая система, NTFS делит все полезное пространство диска на кластеры — блоки данных, используемые единовременно. NTFS поддер­живает различные размеры кластеров — от 512 байт до 64 Кбайт, стандартом считается кластер размером 4 Кбайт.

Диск NTFS условно делится на две части (рис. 5.2). Первые 12 % диска отводятся под так называемую MFT-зону — про­странство, в котором размещен метафайл MFT (Master File Table). Запись каких-либо данных в эту область невозможна-MFT-зона всегда держится пустой — это делается для того, что бы главный служебный файл (MFT) не фрагментировался при своем расширении. Остальные 88 % диска представляют собой пространство для размещения файлов.

 

 

 

Свободное место диска, однако, включает в себя все физиче­ски свободное место – незаполненные участки MFT-зоны туда тоже включаются. Механизм использования MFT-зоны таков: когда файлы уже нельзя записывать в обычное пространство, MFT-зона сокращается, освобождая место для записи файлов. При освобождении участка обычной области MFT-зона может снова расшириться.

Структура MFT. Каждый элемент файловой системы NTFS представляет собой файл, даже служебная информация. Как уже говорилось, главный файл NTFS называется MFT, или Master File Table — общая таблица файлов, которая размещается в MFT-зоне и представляет собой централизованный каталог всех остальных файлов диска. MFT поделен на записи фиксированно­го размера (обычно 1 Кбайт), и каждая запись соответствует ка­кому-либо файлу. Первые 16 файлов носят служебный характер и недоступны операционной системе — они называются метафайлами, причем самый первый из них — сам MFT. Эти пер­вые 16 элементов MFT — единственная часть диска, имеющая фиксированное положение. Остальная часть MFT-файла может сполагаться, как и любой другой файл, в произвольных местах иска — восстановить его положение можно с помощью его самого, используя за основу первый элемент MFT.

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

Все файлы на томе NTFS идентифицируются номером файла, который определяется позицией файла в MFT. Каждый фай и каталог на томе NTFS определяется набором атрибутов.

Базовая единица распределения дискового пространства для файловой системы NTFS — кластер. Размер кластера выражает­ся в байтах и всегда равен целому количеству физических секто­ров. В качестве адреса файла NTFS использует номер кластера не физическое смещение в секторах или байтах.

Загрузочный сектор тома NTFS располагается в начале тома а его копия — в середине тома. Загрузочный сектор состоит из стандартного блока параметров BIOS, количества секторов в томе, а также начального логического номера кластера основной копии MFT и зеркальной копии MFT.

Каждый атрибут файла NTFS состоит из полей: тип атри­бута, длина атрибута, значение атрибута и, возможно, имя ат­рибута.

Имеется системный набор атрибутов, определяемых структу­рой тома NTFS. Системные атрибуты имеют фиксированные имена и коды их типа, а также определенный формат. Могут применяться также атрибуты, определяемые пользователями. Их имена, типы и форматы задаются исключительно пользователем. Атрибуты файлов упорядочены по убыванию кода атрибута, причем атрибут одного и того же типа может повторяться несколько раз. Существует два способа хранения атрибутов фай­ла — резидентное хранение в записях таблицы MFT и нерезидентное хранение вне ее. Сортировка может осу­ществляться только по резидентным атрибутам. Файлы NTFS состоят, по крайней мере, из атрибутов, приведенных в табл. 5.2.

Размещение файлов. Небольшие файлы (small). Если файл имеет небольшой размер, то он может целиком распола­гаться внутри одной записи MFT размером 2 Кбайт (рис. 5.3,а)  Из-за того, что файл может иметь переменное количество атри­бутов, а также из-за переменного размера атрибутов нельзя на­верняка утверждать, что файл уместится внутри записи. Однако, обычно файлы размером менее 1500 байт помещаются внутри записи MFT.

Большие  файлы   (Large).  Если файл не вмещается в одну запись MFT, то этот факт отображается в значении атриоу та «данные», который содержит признак того, что файл являете нерезидентным и находится вне таблицы M FT. В этом случае а рибут «данные» содержит номер кластера для первого кластер  каждого фрагмента данных (data run), а также количество непре­рывных кластеров в каждом фрагменте (рис. 5.3, б).

 

Очень большие файлы  (huge). Если файл настолько велик, что его атрибут данных не помещается в одной записи, то этот атРибут становится нерезидентным, т. е. он размещается в другой записи таблицы  MFT, ссылка на которую помещена в исходной  записи о файле  (рис.  5.3,  в).  Эта ссылка называется внешним  атрибутом (external attribute). Нерезидентный атрибут содержит указатели на фрагменты данных.

 

Сверхбольшие файлы (extremely huge). Для сверх­больших файлов внешний атрибут может указывать на несколько нерезидентных атрибутов (рис. 5.3, г). Кроме того, внешний атрибут, как и любой другой атрибут, может храниться в нерези­ной форме, поэтому в NTFS не может быть атрибутов слишком большой длины, которые система не может обработать.

Каталоги. Каждый каталог NTFS представляет собой один вход в таблицу MFT, который содержит список файлов специальной формы, называемый индексом (index). Индексы позволяют сортировать файлы для ускорения поиска, основанного на рачении определенного атрибута. В файловых системах FAT и HPFS используется сортировка файлов по имени. NTFS позво­ляет использовать для сортировки любой атрибут, если он хра­нится в резидентной форме. Имеется две формы списка файлов.

Небольшие списки файлов (small indexes). Если количество файлов в каталоге невелико, то список файлов мо­жет быть резидентным в записи в MFT, являющейся каталогом. В этом случае он называется небольшим каталогом (рис. 5.4, а). Небольшой список файлов содержит значения атрибутов файла. По умолчанию — это имя файла, а также номер записи MTF, содержащей начальную запись файла.

Большие списки файлов (large index). По мере того, как каталог растет, список файлов может потребовать не­резидентной формы хранения. Однако начальная часть списка  всегда остается резидентной в корневой записи каталога в табл це MFT (рис. 5.4, б).

 

Имена файлов резидентной части списка файлов являются узлами В-дерева. Остальные части списка файлов размещаются вне MFT. Для их поиска используется специальный атрибут «размещение списка» (Index AllocationIA), представляющий собой набор номеров кластеров, которые указывают на остальные части списка. Одни части списков являются листьями дерева, а другие — промежуточными узлами, т. е. со­держат наряду с именами файлов атрибут Index Allocation, ука­зывающий на списки файлов более низких уровней.

 

Имена файлов

 

NTFS поддерживает имена файлов длиной до 255 символов. Имена файлов NTFS используют набор символов UNICODE с 16-битовыми символами. NTFS автоматически генерирует под­держиваемое MS-DOS имя для каждого файла. Таким образом, файлы NTFS могут использоваться в сети операционными сис­темами MS-DOS и OS/2.

Поскольку NTFS использует набор символов UNICODE для имен файлов, существует возможность использования некото­рых запрещенных в MS-DOS символов. Для генерации коротко­го имени файла в стиле MS-DOS NTFS удаляет все запрещен­ные символы, точки (кроме одной), а также любые пробелы из длинного имени файла. Далее имя файла усекается до 6 симво­лов, добаштяется тильда (~) и номер. Расширение имени файла усекается до 3 символов.

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

 

Другие особенности ФС

 

Надежность NTFS. NTFS является восстанавливаемой (recoverable) файловой системой, которая может привести себя в корректное состояние при практически любых реальных сбоях. Любая современная файловая система основана на таком поня­тии, как транзакция — действие, совершаемое целиком и кор­ректно или не совершаемое вообще.

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

При модификации файла специальная компонента файловой системы — сервис регистрации файлов (Log File Service) — фиксирует всю информацию, необходимую для по-торения (redo) или отката (undo) транзакции в специальном файле с именем $LogFile. Если транзакция не завершается нормально, то NTFS пытается закончить транзакцию (повто­рить) или производит ее откат.

Для обеспечения сохранности пользовательских данных ис­пользуется программная поддержка массивов RAID (Redundant Array of Inexpensive/Independent Disks — см. рис. 5.16) [24, 25]. В сочетании с поддержкой зеркализации дисков или расщепления с контролем четности (RAID 5) NTFS может выдержать любой одиночный сбой. В Windows NT под­держиваются уровни 0, 1 и 5. В RAID 0 данные расщепляются на блоки по 64 Кбайт, поддерживается от 2 до 32 дисков. RAID 1 осуществляется на уровне разделов, т. е. зеркализируются имен­но разделы. При отказе зеркализованного раздела администра­тор должен отменить отношения зеркализации, чтобы использо­вать оставшийся раздел как отдельный том. Затем можно ис­пользовать свободный раздел на другом диске, чтобы вновь установить зеркальные отношения. Зеркализации может быть подвергнут любой раздел, включая загрузочный (Boot Partition). В принципе зеркализация является более дорогим способом, чем Другие, так как коэффициент использования дискового пространства составляет только 50 %, с другой стороны, для неболь­ших сетей это весьма приемлемый вариант, так как для его реа­лизации достаточно только двух дисков.

RAID 5 требует минимум трех дисков (максимум 32 диска), поддерживает файловые системы FAT, NTFS, причем загрузочный раздел не может быть расщеплен. Если отказывает диск, входящий в состав массива RAID 5, то компьютер может продолжать работу и получать доступ к данным. Однако данные отказавшего диска будут в течение всего времени регенерироваться на основании данных других дисков, и производительность си темы может упасть. Можно воссоздать данные отказавшего диска на новом диске. Для этого нужно иметь свободный раздел на каком-либо работоспособном диске равного или большего раз мера, чем отказавший. Затем запускается процедура восстанет ления данных из пункта Regenerate меню Fault Tolerance утили­ты Disk Manager.

NTFS поддерживает также «горячее» переназначе­ние секторов, когда при возникновении ошибки из-за нали­чия плохого сектора данные переписываются в новый хороший сектор, а сбойный исключается из работы. Администратор уве­домляется с помощью утилиты просмотра событий Event Viewer о всех событиях, связанных с обработкой сбойных секторов, а также о потенциальной угрозе потери данных, если избыточная копия также отказывает.

Сжатие. NTFS имеет встроенную поддержку сжатия дис­ков — то, для чего раньше приходилось использовать Stacker или DoubleSpace. Любой файл или каталог в индивидуальном поряд­ке может храниться на диске в сжатом виде — этот процесс про­зрачен для приложений. Сжатие файлов осуществляется с высо­кой скоростью, однако при этом часто возникает отрицательный эффект — фрагментация сжатых файлов. Сжатие осуществляется блоками по 16 кластеров и использует так называемые вирту­альные кластеры — гибкое решение, позволяющее добить­ся полезных эффектов, например, половина файла может быть сжата, а половина — нет. Это достигается благодаря тому, что хранение информации о компрессированности определенных фрагментов очень похоже на обычную фрагментацию файлов.

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

 

Hard Link один и тот же файл может иметь два имени (несколько указателей файла-каталога или разных каталогов ссылаются на одну и ту же MFT-запись). Допустим, один и тот же файл имеет имена l.txt и 2.txt, и если пользователь удалит файл l.txt, останется файл 2.txt, наоборот, если сотрет 2.txt – останется файл 1.txt, т. е. оба имени с момента созда­ния файла равноправны. Файл физически удаляется лишь тогда, когда будет удалено его последнее имя.

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

В табл. 5.3 приведены некоторые характеристики ФС ряда различных ОС.

 

 

 

5.2. Базы данных и СУБД

 

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

Предположим, что мы решили реализовать эту информационную систему на основе файловой системы и пользоваться при этом одним файлом, расширив базовые возможности файловой системы за счет специальной библиотеки функций. Поскольку минимальной информационной единицей в нашем случае явля­ется сотрудник, естественно потребовать, чтобы в этом файле содержалась одна запись для каждого сотрудника. Очевидно, что поля таких записей должны содержать полное имя сотрудника (сотр_имя), номер его удостоверения (сотр_номер) , информа­цию о его соответствии занимаемой должности (СОТР_статус — для простоты «да» или «нет»), размер зарплаты (СОТР_ЗАРП), номер отдела (СОТР_ОТД_НОМЕР). Поскольку мы хотим ограни­читься одним файлом, эта же запись должна содержать имя ру­ководителя отдела (сотр_отд_рук).

Для выполнения функций нашей информационной системы требуется возможность многоключевого доступа к этому файлу по уникальным ключам (не дублируемым в разных записях) СОТР_ИМЯ и СОТР_НОМЕР. Кроме того, должна обеспечиваться возможность выбора всех записей с общим заданным значением СОТР_ОТД_НОМЕР, т. е. доступ по неуникальному ключу. Чтобы получить численность отдела или общий размер зарплаты, ин­формационная система должна будет каждый раз выбирать все записи о сотрудниках отдела и подсчитывать соответствующие общие значения.

Таким образом, для реализации даже такой простой системы на базе файловой системы:

•  во-первых, требуется создание достаточно сложной  над­стройки, обеспечивающей многоключевой доступ к фай­лам;

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

Вообще,  согласованность   данных   является  ключевым понятием баз данных. На самом деле, если информационная система поддерживает согласованное хранение информаци в нескольких файлах, можно говорить о том, что она подцержи вает базу данных. Если же некоторая вспомогательная система управления данными позволяет работать с несколькими файла­ми, обеспечивая их согласованность, можно назвать ее системой управления базами данных. Уже только требование поддержания согласованности   данных   в   нескольких   файлах  не   позволяет обойтись библиотекой функций: такая система должна обладать некоторыми собственными данными (метаданными) и даже зна­ниями, определяющими целостность данных.

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

Системы управления базами данных (СУБД) берут такую работу на себя. Прикладная система обязана знать, какое состояние данных является корректным, но всю техниче­скую работу принимает на себя СУБД.

Наконец, представим себе, что мы хотим обеспечить па­раллельную (например, многотерминальную) работу с базой данных сотрудников. Если опираться только на использо­вание файлов, то для обеспечения корректности изменений на все время модификации любого из двух файлов доступ других пользователей к этому файлу будет блокирован (вспомните воз­можности файловых систем для синхронизации параллельного доступа). Таким образом, зачисление на работу Петра Ивано­вича Сидорова существенно затормозит получение информа­ции о сотруднике Иване Сидоровиче Петрове, даже если они будут работать в разных отделах. Реальные СУБД обеспечивают гораздо более тонкую синхронизацию параллельного доступа к данным.

 

Типология БД

 

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

По форме представляемой информации выделяют:

• фактографические;

• документальные;

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

 

По типу хранимой (немультимедийной) информации выделяют:

• фактографические;

• документальные;

• лексикографические БД.

Лексикографические базы — классификаторы, кодификаторы, словари основ слов, тезаурусы, рубрикаторы и т. д., обычно ис­пользуемые в качестве справочных совместно с документальны­ми или фактографическими БД.

Документальные базы по уровню представления информации подразделяются на: полнотекстовые (так называемые «первич­ные» документы), библиографические и реферативные («вторич­ные» документы, отражающие на адресном и содержательном уровне первичный документ).

По типу используемой модели данных выделяют три классиче­ских класса БД:

• иерархические;              

• сетевые;

• реляционные.

Развитие технологий обработки данных привело к появле­нию постреляционных, объектно-ориентированных, темпораль­ных БД, в той или иной степени соответствующих трем упомянутым классическим моделям.

По топологии хранения данных различают локальные и рас­пределенные БД.

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

По функциональному назначению (характеру решаемых с помощью БД задач и, соответственно, характеру использовани данных) выделяют операционные и справочно-информацион ные БД.

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

По сфере возможного применения различают универсальные и специализированные (или проблемно-ориентированные) системы.

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

По назначению содержащейся информации выделяют БД

• деловой информации (социальная, коммерческая и другая информация, кадастры, регистры);

•  информации для специалистов (экономическая, правоох­ранительная и др информация);

•  массовой информации.

По способу доступа существуют БД:

•  размещенные на хостах (доступные через сети);

• тиражируемые в коммуникативных форматах;

• тиражируемые  с  программными средствами  (включая - CD-ROM);

• локальные.

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

Таким образом, СУБД решают множество проблем, которые затруднительно или вообще невозможно решить при использо­вании файловых систем. При этом существуют:

•  приложения, для которых вполне достаточно файлов;

• приложения, для которых необходимо решать, какой уро­вень работы с данными во внешней памяти для них тре­буется; .

• приложения, для которых безусловно нужны базы данных.

 

Модели данных и структура БД             

 

Понятие МД в первую очередь относится к фактографиче­ским или табличным БД. Поскольку в данном случае БД являет­ся информационной моделью определенной предметной облас­ти существенной особенностью всякой БД является структура или, как принято говорить, модель данных (МД).

Рассмотрим некоторые наиболее известные (или «замеча­тельные») модели данных — иерархическую, сетевую, реляционную.

Иерархическая МД (НМД). Впервые реализована в СУБД  IBMIMS (Information Management System), разработанной для поддержки банка данных по программе Apollo. При данном подходе предметная область представляется в виде совокупности структур иерархического типа (граф — «дерево»).

Основные понятия ИМД:

поле — минимальная единица данных;

сегмент (узел) — совокупность полей, являющаяся едини­цей обмена между БД и прикладной программой. Сегмент (узел иерархического графа) более высокого уровня назы­вается исходным (родительским) по отношению к ниже расположенному порожденному (отпрыску). Может использо­ваться также терминология «узел, принадлежащий выше­стоящему узлу».

Конкретные данные, входящие в сегмент, называются экзем­пляром сегмента.

В ИМД существуют также следующие понятия:

•  брат — узел, имеющий того же родителя, что и другой узел;

•  ветвь — узел дерева вместе со всеми его отпрысками, отда­ленными потомками и родительскими источниками;

лист – узел, у которого нет отпрысков;    

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

Преимущества IMS и реализованной в ней иерархической модели:

•  простота модели. Принцип построения IMS легок для по­нимания.   Иерархия  базы данных  напоминает структуру компании или генеалогическое дерево;

•  использование отношений предок/потомок. СУБД IMS по­зволяла легко представлять отношения  предок—потомок (или часть—целое, причина—следствие), например: «а яв­ляется частью В» или «А владеет В»;

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

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

В частности, в связи с полииерархичностью связей объектов в реальном мире в подобных БД необходимо создавать и поддер­живать несколько иерархических отношений, что нарушает ос­новную идею модели данных.

Сетевая модель данных (модель CODASYL). В предложенной CODASYL модификации иерархической модели одна запись могла участвовать в нескольких отношениях предок/потомок. В сетевой модели такие отношения называются множествами (set). В 70-е гг. независимые производители программного обеспечения реализовали сетевую модель в таких продуктах, как IDMS компании Cullinet, Total компании Cincom, которые при­обрели большую популярность. Сетевые БД обладали рядом преимуществ:

•  гибкость — множественные отношения предок—потомок  позволяют сетевой БД хранить данные, структура которых сложнее обычной иерархии;                                                  

стандартизованность — соответствие стандарту CODASYL;

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

Недостаток — жесткость БД, наборы отношений и структуру записей приходилось

задавать заранее.  Изменение  структуры данных означало перестройку всей БД.

 

Реляционная модель данных и операции  над отношениями                                                          

 

В то время как иерархическая модель в своей основе являет­ся формализацией и обобщением пользовательских свойств не­которой конкретной системы (IMS), в случае реляционной мо­дели сначала были разработаны некоторые математические ос­новы и лишь через 5—10 лет появились первые коммерчески эффективные системы.

Реляционная модель предложена сотрудником компании IBM Е. Ф. Коддом в 1970 г. В настоящее время эта модель явля­ется фактическим стандартом, на который ориентируются прак­тически все современные коммерческие СУБД.

В реляционной модели достигается гораздо более высокий уровень абстракции данных, чем в иерархической или сетевой. Это обеспечивается за счет использования математической теории отношений (само название «реляционная» проис­ходит от английского relation — «отношение»).

Определения. Перейдем к рассмотрению структурной части реляционной модели данных. Прежде всего необходимо дать не­сколько определений.

 

Декартово произведение: для заданных конечных множеств D1, D2 , …, DN (не обязательно различных) декартовым (прямым) произведением  D1 × D2 × …× DN  называется множество наборов: {d1 ,d2 …,dN},где d1 D1, dD2,..., dN  DN.

Например, если даны два множество А = {а1, а2, а3} и В={b1, b2}, их декартово произведение будет иметь вид

 

C=A х В = {{а1b1}, {а1,b2}, {а2,b1}, {a2,b2}, {a3,b1,}, {a3 b2}}.

Отношение:  отношением  Rопределенным  на  множества D1, D2, ..., DN, называется подмножество декартова произведены D1 х D2 x ... х DN. При этом:

множества D1, D2, ..., DN называются доменами отношения-элементы декартова произведения {d1, d2, ..., dN} называются кортежами;

число N определяет степень отношения (N= 1  — унарное, N= 2 — бинарное, ..., N-арное);

количество кортежей называется мощностью отношения;

 

 

На множестве С из предыдущего примера могут быть опре­делены отношения

R1 ={{а1,b2},{а3,b2}} или   R2 = {{a1,b1}, {a2,b1},{a1,b2}}.

Отношения удобно представлять в виде таблиц. Строки таблицы называются экземплярами отношения, столб­цы — атрибутами; каждый атрибут имеет область значений, называемую доменом. На рис. 5.6 представлена таблица (отно­шение степени 5), содержащая некоторые сведения о деталях ав­томобилей.

 

 

Так, таблица Деталь содержит сведения обо всех деталях, хранящихся на складе, а ее строки являются наборами значе­ний атрибутов конкретных деталей. Каждый столбец табли­цы — это совокупность значений конкретного атрибута объек­та.   Столбец  Материал   может  содержать  конечный   перечень значений – Сталь, Олово, Цинк, Никель и т. д. В столбце Количество содержатся целые неотрицательные числа, Значения в столбце Вес – вещественные числа, равные весу детали в ки­лограммах.

Каждый   атрибут   определен   на   домене,   поэтому   домен , (domain) можно рассматривать как множество допустимых значений данного атрибута. Так, значения в столбце Материал вы­бираются из множества имен всех возможных материалов —пластмасс, древесины, металлов и т. д. Следовательно, в столбце Материал невозможно появление значения, которого нет в соот­ветствующем домене, например, Вода или Песок.

Каждый столбец имеет имя, которое обычно записывается в верхней части таблицы (рис. 5.6). Оно должно быть уникальным в таблице, однако различные таблицы могут иметь столбцы с одинаковыми именами. Любая таблица должна иметь по край­ней мере один столбец; столбцы расположены в таблице в соот­ветствии с порядком следования их имен при ее создании. В от­личие от столбцов, строки не имеют имен; порядок их следования в таблице не определен, а количество логически не ограничено.

Так как строки в таблице не упорядочены, невозможно вы­брать строку по ее позиции — среди них не существует «пер­вой», «второй», «последней». Любая таблица имеет один или не­сколько столбцов, значения в которых однозначно идентифици­руют каждую ее строку. Такой столбец (или комбинация столбцов) называется первичным ключом (primary key). В таблице Деталь первичный ключ — это столбец Номер_детали. В нашем примере каждая деталь на складе имеет единствен­ный номер, по которому из таблицы Деталь извлекается необ­ходимая информация. Следовательно, в этой таблице первичный ключ — это столбец Номердетали. В этом столбце значения не могут дублироваться — в таблице Деталь не должно быть строк, меющих одно и то же значение в столбце Номер_детали. Если а лица удовлетворяет этому требованию, она называется отно­шением (relation).

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

 

Номер (например, табельный номер). Столбец Фамилия не может выполнять роль первичного ключа, так как в одной организации могут работать два руководителя с одинаковыми фамилиями. Любой служащий подчинен единственному руководителю, что должно быть отражено в базе данных. Таблица Служащий содер­жит столбец Номер_руководителя, и значения в этом столбце выбираются из столбца Номер таблицы Руководитель (см. рис. 5.7). Столбец Номер_Руководителя является внешним ключом В таблице Служащий.

Таблицы невозможно хранить и обрабатывать, если в базе данных отсутствуют «данные о данных» (метаданные), на­пример, описатели таблиц, столбцов и т. д. Метаданные также представлены в табличной форме и хранятся в словаре данных (DDdata dictionary) или описателе БД (DBDdata base definition) — служебном файле или системной таблице БД.

Помимо таблиц в базе данных могут храниться и другие объ­екты, такие, как экранные формы, отчеты (reports), представления (views) и прикладные программы, работающие с базой данных.

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

Для того чтобы гарантировать корректность и взаимную не­противоречивость данных, на базу данных накладываются некоторые ограничения, которые называют ограничениями целостности (data integrity constraints).

Существует несколько типов ограничений целостности. Требуется, например, чтобы значения в столбце таблицы выбирались только из только из соответствующего домена. На практике учитыва­ли более сложные ограничения целостности, например целе­бность по ссылкам (referential integrity). Ее суть заключается в том, что внешний ключ не может быть указателем на несуществующую строку в таблице.

Свойства отношений.

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

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

Атомарность значений атрибутов, т. е. среди зна­чений домена не могут содержаться множества значений (отно­шения).

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

Операндами реляционной алгебры являются отношения как постоянные, так и переменные.

Операции реляционной алгебры включают следующие преоб­разования отношений.

А. Теоретико-множественные операции над несколькими по­добными (имеющими одинаковую структуру: число атрибутов, Их имен, домены и т. д.), отношениями, в том числе объедиение, пересечение, разность.

Б. Операции над одним отношением:

селекция, или построение отношения-результата из отно­шения-источника путем отбора экземпляров, удовлетво­ряющих некоторому критерию отбора. Операция селекции соответствует поиску информации в БД по логическим условиям; (find   ...   with,    find...where,    locate, см табл. 5.5

проекция, или построение результирующего отношения п тем отбора части атрибутов всех экземпляров исходного отнощ ния. Данной операции в реальных СУБД соответствует поняти пользовательской подсхемы  и операции  выдачи  необходимы данных  (DISPLAY, VIEW, SET FORM TO, REPORT FORM...).

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

В СУБД соединению соответствует поиск связанных дан­ных     или     логическое     (физическое)     связывание     файлов (FIND. . .COUPLED,  SET   RELATION   TO,  JOIN.

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

 

Язык SQL

 

С целью стандартизации формального описания запросов к базе данных они формулируются на стандартном языке запросов (ЯМД — язык манипулирования данными), которым для многих СУБД является SQL [8].

Появление и развитие этого языка как средства описания доступа к базе данных связано с созданием теории реляционных баз данных. Прообраз языка SQL возник в 1970 г. в рамках науч­но-исследовательского проекта System/R, работа над которым велась в лаборатории Санта-Тереза фирмы IBM, и со временем развился в стандарт интерфейса с реляционными СУБД и разра­ботчики нереляционных СУБД снабжают свои системы SQL-ин­терфейсом.

Язык SQL имеет официальный стандарт — ANSI/ISO. Боль шинство разработчиков СУБД придерживаются этого стандарта, однако часто расширяют его для реализации новых возможно­стей обработки данных.

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

if-then-else, for, while и т. д.

Запрос на языке SQL состоит из одного или нескольких опе­раторов, следующих один за другим и разделенных точкой с за­пятой. В табл. 5.4 перечислены некоторые операторы, которые входят в стандарт ANSI/ISO SQL.

 

 

В запросах на языке SQL используются имена, которые однозначно идентифицируют объекты базы данных. В частности, это – имя таблицы (Деталь), имя столбца (Название_детали), а также имена других объектов в базе, которые относятся к дополнительным типам (например, имена процедур и правил). Наряду с простыми используются также сложные имена — например, квалифицированное имя столбца (qualified column name) определяет имя столбца и имя таблицы, которой он принадлежит (Название_детали. Вес).

Каждый столбец в любой таблице хранит данные определенных типов. Различают базовые типы данных — строки символ фиксированной длины, целые и вещественные числа, и дополнительные типы данных — строки символов переменной длины денежные единицы, дату и время, логические данные (значения — Истина и Ложь). В языке SQL можно использовать числовые, строковые, символьные константы и константы типа дата и Время.

Рассмотрим несколько примеров.

Запрос: определить   количество  деталей  на   складе  для щсех типов деталей реализуется следующим образом:

 

 

Результатом запроса будет таблица с двумя столбцами – название_детали и Количество, которые взяты из исходной таб­лицы Деталь. По сути, этот запрос позволяет получить проек­цию исходной таблицы — из строк таблицы деталь образуются строки, которые включают значения, взятые из двух столбцов — Название_детали и Количество.

Запрос: какие детали, изготовленные из стали, хра­нятся на складе?, сформулированный на языке SQL, выгля­дит так:

 

 

Результатом этого запроса также будет таблица, содержащая только те строки исходной таблицы, которые имеют в столбце Материал значение Сталь. Этот запрос позволяет получить се­лекцию таблицы Деталь (звездочка в операторе SELECT озна­чает выбор всех столбцов из таблицы).

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

 

Результат запроса — таблица из двух столбцов —  Название_детали, Количество, которая содержит название и число деталей,  изготовленных из пластмассы и весящих менее 5 кг. По сути, операция выборки является операцией селекции (найти все строки     таблицы  Деталь, у которых  Материал = `пластмасса` и Вес < 5), а затем – проекции (извлечь Название_детали и Количество из выбранных ранее строк).

Одним из средств, обеспечивающих быстрый доступ к таблицам, являются индексы. Индекс — это служебная структура (указатель) базы данных, представляющая собой указатель на конкретную строку таблицы. Он содержит значения, взятые из одного или нескольких столбцов конкретной строки таблицы, и ссылку на эту строку. Значения в индексе упорядочены, что по­зволяет СУБД выполнять быстрый поиск в таблице.

Допустим, что сформулирован запрос к базе данных Склад:

 

 

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

Если же был предварительно создан индекс по столбцу Но­мер таблицы Деталь, то время поиска в таблице будет сокраще­но до минимума. Индекс будет содержать значения из столбца Номер и ссылку на строку с этим значением в таблице Деталь. При выполнении запроса СУБД вначале найдет в индексе значе­ние 'Т145-А8' (и сделает это быстро, так как индекс упорядочен, з его строки невелики), а затем по ссылке в индексе определит физическое расположение искомой строки.

Индекс создается оператором SQL CREATE INDEX (СОЗДАТЬ ИНДЕКС). В данном примере оператор

 

 

Позволит создать индекс с именем Индекс _детали по столбцу Номер таблицы деталь.

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

Если в процессе выполнения этого действия произойдет сбой, например, когда первая операция будет выполнена, а вто­рая — нет, то деньги будут потеряны. Следовательно, любое дей­ствие над базой данных должно быть выполнено целиком, или не выполняться вовсе. Такое действие получило название транзакции.

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

Завершая обсуждение языка SQL, еще раз подчеркнем, что это — язык запросов. На нем нельзя написать сколько-нибудь сложную   прикладную   программу,   которая   работает   с   базой данных. Для  этой  цели  в  современных  СУБД  используются языки   четвертого   поколения   (Forth   Generation   Language  — 4GL), обладающие как основными возможностями процедур­ных языков третьего поколения (3GL), таких, как Си, Паскаль, Ада, так и возможностью встроить в текст программы операто­ры SQL, а также средствами управления интерфейсом пользо­вателя (меню, формами, вводом пользователя и т. д.). Сегодня язык 4GL — это один из фактических стандартов средств Разработки   приложений,   работающих   с   базами   данных.   Бол подробное описание одного из 4GL (Adabas/Natural) читате может найти, например, в [14]. В табл. 5.5 приводятся некото рые команды манипулирования данными других языков и си тем [14].

 

 

 

 

Модел «сущность—связь»

 

Модель сущность—связь или Entity-Relationship (ER) представляет собой обобщение РМД путем разделения отношений, описывающих предметную область на две группы — сущностей и связей.

Сущность (Entity) является первичным, устойчивым объектом описываемым некоторой совокупностью атрибутов.

Связь (Relationship) является вторичным понятием, характе-пизуюшим взаимодействие в пространстве и времени двух или более сущностей, и также задается рядом атрибутов, среди кото-пых присутствуют идентификаторы взаимосвязанных сущностей. При проектировании БД на основе ER-моделей используют ER-диаграммы. Модель ER является удобным средством описа­ния предметной области перед тем, как перейти к ее представле­нию в реляционной модели данных.

Основные представления о структуре БД в рамках указанной модели заключаются в следующем:

а) совокупность сущностей и связей образует концептуальную схему базы данных и отражает структуру предметной области. Элементами схемы являются типы (классы) сущностей и связей; типы состоят из экземпляров, описывающихся значениями ат­рибутов. На рис. 5.8 приведен пример фрагмента диаграммы «сущность — связь», описывающей учебный процесс вуза. Здесь сущностями являются ФАКУЛЬТЕТ, ДИСЦИПЛИНА, СПЕЦИАЛЬНОСТЬ (с возможными атрибутами, например наименование, про­должительность обучения, ЧИСЛО часов и пр.). Связями яв­ляются    выпускает,    включает    (возможные    атрибуты    — КВАЛИФИКАЦИЯ, СЕМЕСТР   ОБУЧЕНИЯ и пр.);

 

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

в) следующий уровень — физическая реализация БД в форме файлов операционной системы ЭВМ. При этом в различных конкретных системах логическому файлу может отвечать один или более физических файлов (или наоборот). Физическая за­пись, как правило, включает одну или более логических записей;

г) уровень представлений пользователя описывает БД в виде совокупности пользовательских подсхем, которые применяются для ввода/вывода информации. С представлениями пользователя связаны также понятия маски редактирования (преобразования данных при окончательном представлении пользователю), и ко­дирования/декодирования (трансляции кодов) — расширения крат­ких представлений данных и аббревиатур с помощью вспомога­тельных файлов и кодовых таблиц (по своей сути — операция соединения отношений в РМД).

 

Структуры баз данных

 

Рассмотрим вкратце обобщенные логическую и физическую структуры БД.

Логическая структура БД (рис. 5.9) предполагает следующие уровни рассмотрения БД:

• база данных (database) — включает одну или несколько подбаз (файлов, таблиц, массивов), каждая из которых состоит из агрегатов данных (записей, документов) — record. Запись  идентифицируется   внутренним   номером   (ISN   —   internal sequential   number,   BH3   —   внутренний   номер   запис SDNsequential document number и пр.);

 

 

запись (документ) — совокупность разнотипных и разноструктурных данных, описывающих (относящихся к) объ­ект реального мира, элемент предметной области АИС. Запись состоит из полей (field);

поле — именованный элементарный или составной фрагмент записи (документа), содержащий информацию об оп­ределенном аспекте (аспектах) элемента (элементов) пред­метной области.           

элементарные (имеющие фиксированную или ограниченную длину)  и  не содержащие  входящих в них структур данных;

•  составные (групповые) поля, образующиеся как агрегать элементарных и также имеющие фиксированную и ограниченную длину (реже — переменную или неопределенную, что связано с количеством вхождений элемента в агрегат)

• текстовые — поля переменной (неопределенной) длины и сложной внутренней структуры (обычно это иерархическая последовательность типа раздел – подраздел –предложение – слово);

бинарные — данные, интерпретируемые как поля, однако обычно физически не входящие в состав записей БД. Не­обходимо отметить, что поля данного типа (BLOBBinary Large Object) фактически являются данными, до обработки которых данная СУБД еще «не доросла» и поэтому работа с ними возлагается на пользователя (прикладные програм­мы). В частности, в системах FoxBase и Clipper большие текстовые (так называемые MEMO) поля также не обрабатываются системой и фактически оказываются в статусе BLOB;

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

Определение нового типа данных сводится к указанию ег имени, размера и идентификатора в глобальной структуре, описывающей типы данных. Чтобы с новым типом данных можн было использовать функции,  которые реализуют стандартнь операции  (сравнение,  преобразование  в  различные  форматы и т. д.), программист должен разработать их самостоятельно ( интерфейс функций предопределен). Указатели на эти функции являются элементами глобальной структуры. Как только новый тип данных определен, то все операции выполняются над ним,  как над данными стандартного типа. Разрешение пользователю создавать собственные типы данных по сути является одним из шагов развития реляционных СУБД в направлении объектно-реля­ционных систем.

Поля, указанные в заштрихованных прямоугольниках (см. 5.9) относятся к фактографическим АИС, остальные — к до­кументальным.

Физическая структура БД в общем случае имеет вид, приве­денный на рис. 5.10, и включает следующие компоненты:

файл (файлы) исходных (первичных) данных (текстов, бинар­ных данных) содержит собственно объекты, подлежащие поиску, обработке и пр.;

 

 

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

индекс — файл (файлы), связывающий адрес (номер) объ­екта с его содержанием (значением атрибута объекта) обычно состоит из инверсного списка и частотного словаря, который облегчает составление запросов на поиск и по­вышает обозримость БД;

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

Изменение содержания БД может осуществляться как в ре­жиме конечного пользователя (диалоговый ввод или коррекция записей/документов по полям) — обычный для СУБД и редкий для АИПС, так и в режиме администратора БД (обычный для АИПС и реже для СУБД), при этом происходит массовый ввод или загрузка записей/документов.

При любом виде добавления документа/записи для каждого поля осуществляется анализ, обработка и согласованное поме­щение документа и его фрагментов в соответствующие физиче­ские файлы БД.

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

•  в фактографических (табличных) БД вторичный файл мо­жет являться основным накопителем информации, а тек­стовые и бинарные данные фигурируют в качестве необя­зательного приложения;

•  в справочно-библиографических БД текстовые данные на­ходятся во вторичном файле, а первичный отсутствует;

•  в БД с полнотекстовым поиском может отсутствовать вто­ричный  файл,  а  индексирование  (построение  частотны словарей и инверсных списков) проводится по первичному файлу (страницы или абзацы полных текстов);

• может отсутствовать частотный  словарь или   инверсн список.

Надо отметить также вариативность физической реализации и взаимосвязи лингвистического и информационного обеспече­ния АИС:

• словарь данных может физически входить в информацион­ные файлы (первичный или вторичный);

• классификаторы, кодификаторы, тезаурусы могут быть оформлены как физическими файлами (файлами ОС), так и входить в состав БД в виде отдельных таблиц (файлов БД, массивов и пр.) на логическом уровне и т. п.

 

Обработка транзакций

 

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

Традиционные транзакции характеризуются четырьмя свой­ствами: атомарности, согласованности, изолиро­ванности, долговечности (прочности) — ACID (Atomicity, Consistency, Isolation, Durability). Иногда традицион­ные транзакции называют ACID-транзакциями. Упомянутые выше свойства означают следующее:

•  атомарность — операции транзакции образуют нераздели­мый, атомарный блок с определенным началом и концом. Этот блок либо выполняется от начала до конца, либо не выполняется вообще. Если в процессе выполнения тран­закции произошел сбой, происходит откат (backup, воз­врат) к исходному состоянию;

•  согласованность   гарантирует,   что   по   мере   выполнения транзакций данные переходят из одного согласованного состояния в другое — транзакция не разрушает взаимной согласованности данных;

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

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

Расширенные транзакции допускают формирование из ACID-транзакций иерархических структур. Если конкретная мо­дель ослабляет некоторые из требований ACID, то речь идет об ослабленной транзакции.

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

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

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

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

В стандарте ANSI/ISO SQL определены модель транзакций и функции операторов commit и rollback. Стандарт определяет, что транзакция начинается с первого SQL-оператора, инииии руемого пользователем или содержащегося в программе. Все по следующие SQL-операторы составляют тело транзакции. Транзакция завершается одним из четырех возможных способов

(рис 5.П):

• оператор commit означает успешное завершение транзак­ции; его использование делает постоянными изменения, внесенные в базу данных в рамках текущей транзакции;

• оператор rollback прерывает транзакцию, отменяя изме­нения, сделанные в базе данных в рамках этой транзакции; новая транзакция начинается непосредственно после использования rollback;

• успешное завершение программы, в которой была иниции­рована текущая транзакция, означает успешное завершение транзакции (как будто был использован оператор commit);

• ошибочное завершение программы прерывает транзакцию (как будто был использован оператор rollback).

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

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

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

 

 

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

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

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

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

• в процессе выполнения транзакции пользователь (программа) «видит» только согласованные состояния базы данных. Пользователь никогда не может получить доступ к неза фиксированным изменениям в данных, достигнутым в результате действий другого пользователя (программы);

• если две транзакции, А и В, выполняются параллельно, то СУБД полагает, что результат будет такой же, как если бы:

– транзакция А выполнялась первой, а за ней была выпол­нена транзакция В;

– транзакция В выполнялась первой, а за ней была выпол­нена транзакция А.

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

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

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

В современной литературе часто встречается термин OLTP ( Оn - Line Transaction Processing), который обычно переводят как «оперативная обработка транзакций», т. е. выполнение транзакции в режиме реального времени. Система OLTP обязана учитывать   жесткие временные требования, следующие из специфики прикладной области. Например,   процедура   покупки   и оформления авиабилета должна происходить быстро и не задерживать очередь. Система, регистрирующая продажи билетов должна обрабатывать одновременно несколько сотен запросов (транзакций), поступающих от множества продавцов авиабилетов. Требования по скорости обработки запроса могут бьггк очень жесткими, однако вызваны они требованиями реальной жизни. Если говорить о прикладных областях OLTP, то это прежде всего, центры кредитных карточек, системы резервиро­вания авиабилетов и мест в отелях, телекоммуникационные системы и т. д.

 

Классы и структуры систем управления базами данных

 

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

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

СУБД (DBMSdatabase management system) — комплекс языков и программ, позволяющий создавать БД и управлять ее работой. СУБД обрабатывает поступающие от пользователей и прикладных процессов обращения к БД, а затем выдает необхо­димые им сведения. СУБД характеризуется используемой моде­лью и средствами администрирования, разработки прикладных процессов, работы в информационной сети.

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

СУБД обеспечивает:

• описание и контроль данных;

• манипулирование данными (запись, поиск, выдачу, изме­нение содержания);

•  физическое размещение (изменение размеров блоков дан­ных, записей,  использование занимаемого пространства, сортировку, сжатие, кодирование и пр.);

• защиту от сбоев, поддержку целостности и восстановление;

• работу с транзакциями и файлами;

• безопасность данных.

Существует несколько типов СУБД. Эволюционно они про­шли путь от систем, использовавших иерархическую и се­тевую модели данных к реляционным и объект­но-ориентированным.

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

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

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

Гибридные системы управления базами данных объединяют ложительные качества реляционных и объектно-ориентированных систем. Они соединяют средства обработки транзакций реляционных СУБД с поддержкой многочисленных типов даннь объектно-ориентированных СУБД.

Кроме этого, системы управления базами данных можн классифицировать:

По используемому языку общения:

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

•  открытые, в которых для общения с БД используется язык программирования,   «расширенный»   операторами   языка манипулирования данными (ЯМД). В этом случае необхо­димо участие квалифицированного программиста.

По числу поддерживаемых СУБД уровней моде­лей данных: одно-, двух-, трехуровневые системы. Теоретически обоснован выбор трехуровневой архитектуры данных, однако на практике СУБД для персональных ЭВМ часто объединяют кон­цептуальный и внутренний уровни представления.

По выполняемым функциям:

•  операционные,   предполагающие   иные   виды   обработки по получению информации, не хранящейся в явном виде в БД;

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

По сфере применения:

•  универсальные, настраиваемые на любую предметную о ласть путем создания соответствующей БД и прикладны программ;

•  проблемно-ориентированные на определенные процедуры обработки данных, присущих конкретной области применения.                                                                              

В структурном составе СУБД могут быть выделены ядро и среда (рис. 5.12) [14, 32].                                                   

Ядро СУБД — программный комплекс (модуль или модули), обеспечивающий   непосредственное   выполнение   физических операций над БД (в ранних системах функции Ядра выполняли программы методов доступа ОС ЭВМ).

 

 

 

Среда — совокупность интерфейсных модулей, обеспечиваю­щих связь пользователей с Ядром и через него с БД. Среда включает в себя пользовательские интерфейсы и утилиты администратора БД (АБД).

Утилиты АБД образуют библиотеку программ обслуживания БД в привилегированном режиме (работа пользовательских средств параллельно утилитам не разрешена) и выполняют ос­новные функции, к которым относятся:

•  физическая подготовка дисковой памяти к размещению БД;

•  подготовка справок о составе БД, структуре файлов, коли­честве данных и занимаемом объеме;

• загрузка   файла   БД   из   последовательного   набора   дан­ных ОС;

• дозагрузка (расширение существующего файла);

• модификация БД: расширение или перемещение физических наборов данных, реорганизация;

•  модификация файла (таблицы, группы таблиц): добавление новых полей в структуру записи; инвертирование полей или освобождение (превращение инвертированных полей в сканируемые);

• выгрузка образа БД (файла таблицы) для сохранения в архивном наборе данных;

• создание и ведение словаря данных и др.

Средства   пользователя.   Стандартными   средствами   этого типа, предоставляемыми фирмой-разработчиком, являются следующие:

•  диалоговые интерфейсы;

•  генераторы отчетов;

•  система конструирования и поддержки интерактивных тех нологий в информационных системах (ЯП АИС).

 

5.3. Физическая организация данных в системах управления данными

 

Расширим вкратце некоторые принципы физической орга­низации данных.

Как в файловых системах, так и в СУБД существуют опреде­ленные общие и особенные методы построения механизма дос­тупа к данным, которые мы здесь и предполагаем рассмотреть.

С общепринятой точки зрения к вопросам организации дан­ных относятся:

•  выбор типа записи — единицы обмена в операциях вво­да-вывода;

•  выбор способа размещения записей в файле и, возможно, метода оптимизации размещения;

•  выбор способа адресации и метода доступа к записям.

 

Типы записей

 

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

Физическая запись, с которой работает файловая система – совокупность данных, которые размещаются в файле обычно на внешнем носителе и могут быть считаны или записаны как единое целое одной командой ввода-вывода. Здесь файл — последовательность физических записей, размещаемых в линейном пространстве носителя но, в общем случае, не обязательно в линей­ном порядке.

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

На логическом уровне выделяют следующие типы:

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

• записи переменной длины, когда каждый экземпляр запи­си может иметь длину,

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

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

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

 

Организация файлов — способ размещения записей

 

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

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

Выбор последовательности связывается с одним из следую­щих обстоятельств:

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

•  ускорением или упрощением средств адресации файла (на­пример, средств прямой адресации или хэширования);

•  уменьшением размера используемого индекса и сокраще­нием, таким образом, времени поиска в нем;

•  сокращением среднего времени доступа за счет размеще­ния в наиболее доступных местах записей, к которым про­исходит наиболее частое обращение;

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

Можно выделить две «чистые» стратегии определения места (адреса) для размещения записей: последовательное (sequential) и произвольное (random) размещение. В этом смысле алгоритм размещения определяет тип организации файла.

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

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

Рассмотрим следующие, наиболее распространенные мето организации файлов, позволяющих оптимизировать доступ к писям (рис. 5.13).

 

 

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

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

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

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

 

Способы адресации и методы доступа к записям

 

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

В некоторых файлах записи имеют несколько ключей. За­пись закупка может иметь различные НОМЕР поставщика и номер покупателя, каждый из которых является ключом.

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

Основные проблемы при адресации файла можно сформули­ровать следующим образом:

•  по первичному ключу определить местоположение записи с данным ключом;

•  организовать набор записей, чтобы поиск потребовал как можно меньше затрат.

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

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

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

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

Двоичный поиск. При двоичном (бинарном) поиске в файле записей, упорядоченных по ключу, анализируется запись, находящаяся в середине поисковой области файла (изначально всего файла), а ее ключ сравнивается с поисковым ключом. Затем по­исковая область делится пополам, и процесс повторяется для со­ответствующей половины области, пока не будет обнаружено ис­комое значение или длина области не станет равной 1. Число сравнений в этом случае будет меньше, чем для случая блочного поиска.

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

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

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

Если записи файла упорядочены по ключу, индекс обычно содержит не ссылки на каждую запись, а ссылки на блоки записей внутри которых можно выполнять поиск или сканирование. Хранение ссылок  на блоки записей, а не на отдельные записи в значительной степени уменьшает размер индекса. Причем даже в этом случае индекс часто оказывается слишком большим для поиска и поэтому используется индекс индекса.

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

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

•  ключ записи преобразуется в псевдослучайное число, нахо­дящееся в диапазоне от единицы до числа блоков, исполь­зуемых для размещения записей;

•  число преобразуется в адрес блока и, если в нем есть сво­бодное место, то логическая запись размещается там;

•  если блок заполнен, запись должна быть размещена в бло­ке (блоках) переполнения — следующий по порядку блок либо блок отдельной области переполнения.

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

 

Архитектура файловой организации баз данных

 

Файловая структура и система управления файлами являют­ся элементами ОС, поэтому по отношению к БД, которые ори­ентированы на работу с элементами данных и высокую интен­сивность обмена, эффективность операций ввода-вывода не бу­дет оптимальной: стандартный язык СУБД намного богаче, чем набор операций файловой системы.

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

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

Таким образом, БД физически состоит из нескольких фалов: основного, индексного, файла метаданных, файлов указателей и т. д. (рис. 5.10, 5.14, а). В этом случае ОС активно участвует в навигации, беря на себя функции выборки, новления, вставки, удаления записей из физических файлов.

 

 

Страничная организация данных. Другой подход отражает стремление разработчиков сосредоточить в СУБД управле­ние данными на всех уровнях — от логической обработ­ки до управления пространством носителя. Создание сложных специализированных процедур, эффективно работающих со сложными нерегулярными структурами данных в сочетании с ресурсами вычислительной мощности и оперативной памяти по­зволяет реализовать однофайловую физическую структуру СУБД. Перечислим типовые понятия страничной организации хра­нения данных (рис. 5.14, б).

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

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

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

Все страницы данных имеют одинаковую структуру чающую:                                                                                          

•  заголовок страницы, содержащий номер страницы, номера предыдущей и следующей страниц, сведения о свободном пространстве на странице;                                                       

•  дескрипторы строк, задающие смещение строки на странице и длину строки, что позволяет при переупорядочении строк на страницах не производить физического перемещения строк, так как все манипуляции производятся с дескрипторами;

содержание — строки данных (последовательность кодов) каждая из которых имеет уникальный идентификатор в рамках всей БД, который состоит из номера страницы и номера строки на странице.

Для организации быстрого доступа создаются страницы индексов, которые организованы обычно в виде В-деревьев.

 

Модели распределения данных по физическим носителям

 

Важным фактором, влияющим на производительность под­системы ввода-вывода, является распределение данных по дис­кам. Даже минимальная по объему высокопроизводительная система должна иметь по крайней мере четыре диска: один для операционной системы и области подкачки (swap), один для данных, один для журнала и один для индексов.

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

Примером, иллюстрирующим подход с точки зрения прак ческих компромиссов выбора решения, являются RAID-Mac вы. На рис. 5.15 приведены два варианта: RAID-0, обеспечив щий максимальную производительность при «стандартной» надежности, и RAID-1, обеспечивающий  «двойную» надеж при «стандартной» производительности.                                    

 

 

Для эффективного распределения доступа к данным мн СУБД используют механизмы сцепления или расщепления°ГИе распределения данных по дисковым накопителям. Если по запросам производится произвольный доступ к данным, например, если пользователи независимо запрашивают разные записи, то возможности сцепления дисков в СУБД полностью обеспечивают распределение нагрузки по доступу к множеству диско (при достаточно равномерном заполнении пространства базы)

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

Главное отличие между сцеплением и расщеплением заклю­чается в размещении смежных данных.

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

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

 

5.4. Анализ информации и хранилища данных

 

Осознание пользы накапливаемой информации и физиче­ские возможности ее использования для решения задач управления (системы поддержки принятия решений — СППР) приве к появлению нового класса автоматизированных систем, ориентированных на  оперативную аналитическую обработку данных (OLAP).

 

Интеллектуальный анализ данных

 

Интеллектуальный анализ данных ИАД (Data Mining) — это процесс поддержки принятия решений, основанный на поиске в данных скрытых закономерностей (шаблонов информации). При этом накопленные сведения автоматически обобщаются до информации, которая может быть охарактеризована как знания.

В общем   случае   процесс ИАД  состоит из трех стадий (рис. 5.16):                                                                

• выявление закономерностей (свободный поиск);

• использование выявленных закономерно­стей для предсказания неизвестных значений (прогности­ческое моделирование);

• анализ исключений, предназначенный для выявле­ния и толкования аномалий в найденных закономерностях. В качестве примера может быть приведен статистический анализ рядов динамики. Чаще, однако, этот тип анализа относят к области закономерностей.

Кроме того, могут быть сформулированы следующие задачи:

• выделение в массивах данных групп записей, сходных по некоторым признакам (кластерный анализ);

• проверка достоверности найденных закономерно­стей между их нахождением и использованием (стадия валидации).

 

 

Все методы ИАД подразделяются на две большие группы по принципу работы с исходными обучающими данными:          

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

•  во втором случае  информация  извлекается  из пер­вичных данных и  преобразуется  в некоторые формальные конструкции (их вид зависит от конкретного метода). Соглас­но предыдущей классификации, этот этап выполняется на стадии свободного поиска, которая у методов первой группы в принципе отсутствует. Таким образом, для прогностического моделирования и анализа исключений используются результа­ты этой стадии, которые гораздо более компактны, чем сами массивы исходных данных. При этом полученные конструк­ции могут быть либо «прозрачными» (интерпретируемыми), либо «черными ящиками» (нетрактуемыми).

Две эти группы и примеры входящих в них методов пред­ставлены на рис. 5.17.

 

 

 

OLAP – технологии и хранилища данных

 

В основе концепции OLAP лежит принцип  многомерного представления данных. В 1993 г. Е. Ф. Кодд рассмотрел недостатке реляционной модели, в первую очередь указав на невозможность «объединять, просматривать и анализировать данные с точки зрения множественности измерений, т. е. самым понятным для корпоративных аналитиков способом», и определил общие требования  к системам  OLAP,  расширяющим  функциональность реляционных  СУБД  и  включающим  многомерный анализ как одну из своих характеристик.

Аббревиатурой OLAP иногда обозначается не только много­мерный взгляд на данные, но и хранение самих данных в много­мерной БД. Однако Кодд отмечал, что «...реляционные БД были, есть и будут наиболее подходящей технологией для хране­ния корпоративных данных. Необходимость существует не в но­вой технологии БД, а, скорее, в средствах анализа, дополняю­щих функции существующих СУБД и достаточно гибких, чтобы предусмотреть и автоматизировать разные виды интеллектуаль­ного анализа, присущие OLAP».

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

Использование концепции хранилища данных (ХД) позволяет обеспечить:

•  своевременное обеспечение аналитиков всей информаци­ей, необходимой для выработки решений;

•  создание единой модели данных организации;

•  создание интегрированного источника данных, предостав­ляющего удобный доступ к разнородной информации из различных подсистем (единый источник).

Для хранилищ  данных  характерны   следующие   основные свойства:

• ориентация на предметную область — хранилище в первую очередь  отражает  специфику  предметной  области, а не приложений;

• интегрированность  — информация, загружаемая в хранилище из баз, ориентированных на частные прикладные задачи, должна быть приведена к единому синтаксическое семантическому виду. Важно также провести проверку   И ступающих данных на целостность и непротиворечиво Чтобы при выполнении аналитических запросов избеэк выполнения   операций   группирования,   данные   должны обобщаться (агрегироваться) при загрузке хранилища;

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

• поддержка хронологии — для выполнения большинства ана­литических запросов необходим анализ тенденций разви­тия явлений или характера изменения значений переменных во времени, что обычно достигается введением атрибу­тов типа дата/время;

• многомерное   концептуальное   представление   (multi-dimen­sional conceptual view) — множественная перспектива, со­стоящая из нескольких независимых измерений, вдоль которых могут быть проанализированы определенные сово­купности данных. Одновременный анализ по нескольким измерениям определяется как многомерный анализ. Каж­дое измерение включает направления консолидации дан­ных, состоящие из серии последовательных уровней обоб­щения, где каждый вышестоящий уровень соответствует большей степени агрегации данных по соответствующему измерению. Так, измерение Исполнитель  может определиться направлением консолидации, состоящим из уровней обобщения    предприятие—подразделение—отдел—служащий. Измерение Время может даже включать два направления консолидации — год—квартал—месяц—день и неделя—день, поскольку счет времени по месяцам и по неделям несовместим. В этом случае становится возможны произвольный выбор желаемого уровня детализации и формации  по  каждому из  измерений.  Операция спуска (drilling down) соответствует движению от высших ступен консолидации   к   низшим;   напротив,   операция   подъема (rolling up) означает движение от низших уровней к выс­шим (рис 5.18).

 

 

Кода определил 12 свойств, которыми должны обладать сис­темы этого класса (табл. 5.6).

 

 

 

 

Модели данных, используемые для построения хранилищ

 

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

Многомерный OLAP (MOLAP). В специализированных СУБД, иных на многомерном представлении данных, данные организованы не в форме реляционных таблиц, а в виде упорядоченных многомерных массивов:

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

• поликубов (каждая переменная хранится с собствен­ным набором измерений, и все связанные с этим сложно­сти обработки перекладываются на внутренние механизмы системы).

Использование многомерных БД в системах оперативной аналитической обработки имеет следующие достоинства.

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

Многомерные СУБД легко справляются с задачами включе­ния в информационную модель разнообразных встроенных функций, тогда как объективно существующие ограничения языка SQL делают выполнение этих задач на основе реляцион­ных СУБД достаточно сложным, а иногда и невозможным. С другой стороны, имеются существенные ограничения:

•  многомерные СУБД не позволяют работать с больши­ми объемами данных. К тому же за счет денормализации и предварительно выполненной агрегации объем дан­ных в многомерной  базе,  как правило,  соответствует в 2,5—100 раз меньшему объему исходных детализирован­ных данных;

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

Следовательно, использование многомерных СУБД оправдано только при следующих условиях:                              

•  объем исходных данных для анализа не слишком велик более нескольких гигабайт), т. е. уровень агрегации данн достаточно высок; 

•  набор информационных измерений стабилен  (посколь любое изменение в их структуре почти всегда требует полной перестройки гиперкуба);

•  время ответа системы на нерегламентированные запроск является наиболее критичным параметром;

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

Реляционный OLAP (ROLAP). Непосредственное использова­ние реляционных БД в системах оперативной аналитической об­работки имеет следующие достоинства.

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

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

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

Главный недостаток ROLAP по сравнению с многомерными СУБД — меньшая производительность. Для обеспечения произ­водительности, сравнимой с MOLAP, реляционные системы тре­буют тщательной проработки схемы базы данных и настроик индексов, т. е. больших усилий со стороны администраторов БД. Только при использовании звездообразных схем производитель ность хорошо настроенных реляционных систем  может приближена к производительности систем на основе много ных баз данных.            

 Идея схемы звезды (star schema) заключается в том, имеются таблицы для каждого измерения, а все факты помеодну таблицу, индексируемую множественным ключом, составленным из ключей отдельных измерений (рис. 5.19). Каждый луч схемы звезды задает (в терминологии Кодда) направление консолидации данных по соответствующему                                                                      измерению.

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

 

 

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

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

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

 

 

Архитектуры хранилищ данных

 

Виртуальное хранилище данных. В его основе — репозитории метаданных, которые описывают источники информации (БД транзакционных систем, внешние файлы и др.), SQL-запросы для их считывания и процедуры обработки и предоставления информации. Непосредственный доступ к последним обеспеч вает  ПО  промежуточного слоя.   В  этом  случае  избыточной данных нулевая. Конечные пользователи фактически работают транзакционными системами напрямую со всеми вытекаюши отсюда плюсами (доступ к «живым» данным в реальном времени) и минусами (интенсивный сетевой трафик, снижение производительности OLTP-систем и реальная угроза их работоспособности вследствие неудачных действий пользователей-аналитиков)

Витрина данных. Витрина данных (Data Mart) — это набор тематически связанных баз данных, которые содержат информацию, относящуюся к отдельным аспектам предметной области (рис. 5 21). По сути дела, витрина данных — это облегченный вариант хранилища данных, содержащий только тематически объединенные данные. Витрина данных существенно меньше по объему, чем корпоративное хранилище данных, и для его реализации не требуется особо мощная вычислительная техника.

 

 

Глобалъное  хранилище данных. Все более популярной становится идея совместить концепции хранилища и витрины данных в одной реализации и использовать хранилище данных в качестве единственного источника интегрированных данных для всех витрин данных. Тогда естественной становится такая трехуровневая архитектура системы (рис. 5.22):

• сфера детализированных данных. Это область действия большинства систем, нацеленных на поиск информации.

 

 

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

• сфера агрегированных показателей. Комплекс­ный взгляд на собранную в хранилище данных информацию, ее обобщение и агрегация, гиперкубическое предста ление и многомерный анализ являются задачами систем оперативной аналитической   обработки   данных  (OLAР). Здесь можно или ориентироваться на специальные мно мерные СУБД, или оставаться в рамках реляционных т нологий. Во втором случае заранее агрегированные дан могут собираться в БД звездообразного вида либо агрегация информации может производиться на лету в процессе сканирования детализированных таблиц реляционной

• сфера   закономерностей.   Интеллектуальная   обра­ботка  производится  методами  интеллектуального анализа данных (ИАД, Data Mining), главными задачами которых являются поиск функциональных и логических закономер­ностей в накопленной информации, построение моделей и правил, которые объясняют найденные аномалии  и/или прогнозируют развитие некоторых процессов.

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

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

Процесс загрузки данных обычно подразумевает решение следующих задач:

•  приведение данных к единому формату (унификация ти­пов данных и их представления, исключение управляющих кодов);

•  предобработка данных (исключение дубликатов, устране­ние ошибочных значений, восстановление пропущенных значений);

•  агрегирование данных (вычисление обобщенных статисти­ческих показателей).

Ингеграция OLAP и ИАД

 

Оперативная аналитическая обработка и интеллектуальный пяти данных – две составные части процесса поддержки принятия решений. Однако большинство систем OLAP заостряет внимание только на обеспечении доступа к многомерным данным, а большинство средств ИАД, работающих в сфере закономерностей, имеют дело с одномерными перспективами данных. Эти анализа должны быть тесно объединены, т. е. системы ОLAP должны фокусироваться не только на доступе на поиске закономерностей (рис. 5.22). Как заметил N. Raden,  «многие компании создали... прекрасные хранилища данных, идеально разложив по полочкам горы неиспользуемой информации, которая сама по себе не обеспечивает ни быстрой, ни достаточно грамотной реакции на рыночные события».

В последнее время появилось обобщенное понятие «OLAP Data Mining» (многомерный интеллектуальный анализ) или «OLAP Mining» для обозначения такого объединения, причем определились несколько вариантов интеграции двух технологий:

•  cubing then mining. Возможность выполнения интел­лектуального анализа должна обеспечиваться над любым результатом запроса к многомерному   концептуальному представлению, т. е. над любым фрагментом любой проек­ции гиперкуба показателей;

•  mining then  cubing. Подобно данным, извлеченным из   хранилища,    результаты   интеллектуального   анализа должны представляться в гиперкубической форме для последующего многомерного анализа;

•  cubing while mining. Этот гибкий способ интеграции позволяет автоматически активизировать однотипные ме­ханизмы интеллектуальной обработки над результатом ка­ждого шага многомерного анализа (перехода между уров­нями обобщения, извлечения нового фрагмента гиперкуба и т. д.).

К сожалению, очень немногие производители предоставляют сегодня достаточно мощные средства интеллектуального анализа многомерных данных в рамках систем OLAP. Проблема также заключается в том, что некоторые методы ИАД (байесовские сети, метод

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

 

Контрольные вопросы

 

1. Перечислите функции файловых систем.

2. Какова общая организация ФС NTFS?

3. Какие атрибуты файлов вам известны?

4. Охарактеризуйте разновидности размещения файлов в NTFS.

5  Каким образом осуществляется сжатие данных в NTFS?

6. Дайте определение понятия «База данных».

7.  Перечислите преимущества и недостатки использования баз данных.

8.  Определите основные функции и назначение СУБД.

9.  Дайте основные характеристики моделей данных.

10. Что такое реляционное исчисление?

11. Перечислите основные компоненты логической и физической структу­ры БД.

12.  Что такое транзакции?

13.  Назовите отличительные особенности использования баз данных в ИС.

14.  Перечислите основные требования, предъявляемые к базам данных.

15.  Определите назначение и организацию инвертированного списка.

16.  В чем заключается страничная организация данных?

17.  Что такое хранилища данных?

18.  Перечислите основные свойства OLAP-технологий.

19.  В чем различие ROLAP и MOLAP?