Введение в базы данных
1.4 Аппаратная реализация
Свойства современных запоминающих устройств во многом определяют структуру и функции СУБД.
Базы данных используют все виды памяти:
- Первичная (оперативная) память имеет емкость до единиц гигабайт. Время обращения десятки или сотни наносекунд (10-8-10-7c). НЕ СОХРАНЯЕТ ИНФОРМАЦИЮ ПРИ ПЕРЕРЫВАХ В ПИТАНИИ!!
- Вторичная память (как правило, жесткий магнитный диск) имеет емкость от сотен гигабайт до единиц, десятков или сотен терабайт. Время обращения — сотые доли секунды.
- Третичная память (массивы магнитных или оптических дисков, другие оптические носители) — емкость практически не ограничена. Время обращения секунды, десятки секунд или минуты.
В соответствии с традицией термин память означает первичная память.
Если немедленно сохранять введённые или вычисленные данные, то запросы к базе будут выполняться недопустимо медленно. Ведь придётся постоянно обращаться к медленной вторичной памяти.
Давайте посмотрим, как устроен жесткий магнитный диск (рисунок 1.8).
Внутри него может быть установлено несколько двусторонних магнитных дисков. Данные со всех поверхностей считываются и записываются на них с помощью магнитных головок, объединённых держателем, перемещаемым с помощью серводвигателя. Диск вращается с постоянной скоростью, измеряемой в оборотах в минуту. Данные на диске организованы в цилиндры, дорожки и секторы. Цилиндры — это наборы дорожек на дисках в виде концентрических окружностей, расположенных одна над другой. Дорожка разделяется на секторы. Минимальная единица данных на диске — сектор.
Внешняя дорожка длиннее внутренней, поэтому на ней можно разместить больше секторов, чем на внутренней дорожке.
Скорости вращения диска лежат в пределе от 3600 до 7200 об./мин. Существуют более быстрые диски со скоростью около 10-15 тысяч об./мин. Однако, уже при скорости 7200 об./мин возникают проблемы с теплоотводом.
Время поиска данных складывается из времени подвода головки к нужному цилиндру, времени ожидания нужного сектора и собственно времени чтения.
Время чтения или записи определяется скоростью вращения диска и количеством читаемых секторов. При необходимости работы с разными цилиндрами скорость существенно падает из-за необходимости перемещения головок. Система связи диска с машиной работает настолько быстро, что практически не влияет на скорость обмена данными.
Для диска со скоростью вращения 3600 об./мин среднее время ожидания сектора, соответствующее половине оборота диска составляет 1/60/2, примерно 8,3 мс. Если учесть время подвода головки, составляющее несколько миллисекунд, приходится признать, что время обращения к диску составляет не менее 10 мс (0, 01 с). А если нужные вам данные находятся на нескольких цилиндрах? А если одновременно с базой работает 100 человек? Придётся ждать от секунд до многих минут.
Выход из положения давно известен. В его основе лежит экспериментально установленный факт. Оказывается, достаточно размещать рядом записи из одной структуры данных и из структур, данные которых могут использоваться совместно. И если каждый раз считывать не только необходимые данные, но и другие связанные данные в буфер, расположенный в оперативной памяти, то, скорее всего, большая часть данных считанных, "на всякий случай", вам и понадобится в следующий раз.
В первичной памяти создается кэш буферов достаточно большой емкости. Если кроме информации, используемой в данный момент удастся извлечь информацию, которая понадобится в ближайшем будущем, и сначала искать информацию в кэше, а только потом обращаться к диску, то число обращений к диску резко сократится.
Показатель эффективности буфера должен быть как можно ближе к 1. Если, например, Hlt_ratlo=0.95, то из двадцати обращений к данным только одно вызывает обращение к диску. Остальные данные выбраны из кэша. Практика показывает, что возможны значения Hit_ratio ещё более близкие к единице.
1.5 Определение базы данных
Теперь можно дать предварительное определение базы данных, имея в виду преимущественно электронные реализации.
Будем понимать под базой данных (БД) собрание данных, которое должно обладать следующими свойствами:
- основные данные интегрированы в некоторые, может быть связанные, структуры (записи, списки, массивы, таблицы со связями, деревья, сети, классы и т.д.), описываемые схемами; в свою очередь, эти структуры могут агрегироваться в структуры верхних уровней со своими схемами;
- база обладает персистентностью — способностью хранить данные при выключении питания;
- база содержит данные, представляющие семантику основных данных; первое свойство таких данных — прикрепление к основным данным или процедурам; второе свойство — активность; частные аспекты семантики, смыслы, реализуются в рамках имеющихся в базе типов данных, ограничений целостности, метаданных и с помощью средств, предназначенных для работы со смыслами, введёнными пользователем;
- основные данные независимы от обрабатывающих их программ; это означает, что можно создавать структуры данных, не обращая внимания на их обработку, а для изменения данных не требуется изменять тексты программ;
- база данных есть модель некоторого фрагмента предметной области.
Обычно база данных создается в рамках одной модели данных, а остальные модели эмулируются в ней. Высказывалась мысль о том, что для повышения эффективности необходимо реализовывать все используемые модели независимо друг от друга. Препятствием к реализации многомодельной базы может стать необходимость использования своих языков для каждой модели, либо низкая эффективность единственного языка, работающего во всех моделях.
1.6 Что такое администрирование базы данных
Среди лиц, связанных с созданием и использованием информационных систем и собственно баз данных, принято выделять, в первую очередь, разработчиков и пользователей.
В этой книге мы почти всегда будем позиционировать себя в качестве разработчиков.
Пользователей можно разделить на два вида:
- Собственно пользователи. Это люди, для которых информационная система есть инструмент, предоставленный разработчиком. Пользователь может быть недоволен им, но изменить его не может. Пользователь обычно достаточно хорошо разбирается в технологиях бизнеса (или некоторой их части), но программистских знаний не имеет.
- Администраторы. Это лица, ответственные за управление информационной системой. В сложных и ответственных системах выделяют ещё администраторов данных, которые отвечают в первую очередь за данные, а не программы, и администраторов безопасности.
Среди множества приложений, использующих базы данных, выделим корпоративные информационные системы. Их пользователи обладают двумя важными свойствами — они обучены и ответственны. Более точно:
- Они обучены бизнесу и пользованию информационной системой.
- Они несут ответственность за данные, с которыми работают в рамках служебных обязанностей.
Существуют системы, в которых такие требования к пользователям не реализуемы.
Положим вы хотите собрать сведения о пользователях вашего сайта. Пусть на вопрос об имени я ответил "DJVasja". Вы этого запретить мне не можете. А теперь, представьте, что такой фокус выкинул бухгалтер, начисляющий заработную плату. Представили? Мне это трудно вообразить. В дальнейшем изложении будем предполагать, что пользователи всегда обучены и ответственны. И только в "Семантика баз данных" допустим другие возможности
Перечислим основные задачи, которые решает администратор базы данных:
- Создание, поддержание и развитие структур памяти.
- Создание схем данных.
- Сохранение данных и восстановление их при сбоях и отказах.
- Работа с пользователями. Сюда входит создание пользователей и определение их возможностей.
- Оценка и оптимизация производительности.
- Формирование требований к аппаратной части.
- Прогнозирование развития системы.
В этой книге администрированием мы почти не будем заниматься. Это не наша тема. Так что остаётся надеяться на лучшее, не умея пока преодолевать худшее, и высказать традиционное админское пожелание: "Хороших вам данных!".