3. Анализ программных реализаций СУБД
Любая СУБД основывается на определенной модели данных. С конца 70-х годов наибольшую популярность получила реляционная модель данных. Реляционные СУБД и поныне играют главенствующую роль на мировом рынке СУБД. Однако все большее число разработчиков пользовательских приложений, использующих СУБД, выражают неудовлетворение несоответствием реляционной модели сегодняшним требованиям, предъявляемым к срокам разработки проектов, скорости обработки запросов к базам данных. Особенно это проявляется при проектировании систем, в которых хранятся сложные неструктурированные данные. Крупнейшие разработчики СУБД фактически признали это, спешно встраивая в свои продукты поддержку объектно-ориентированного программирования. Поэтому далее рассмотрим только конкретные реализации СУООБД.
3.1. Особенности программирования объектной СУБД
Создание программ для объектных баз существенно отличается от написания приложений, взаимодействующих с реляционными СУБД. Объектная СУБД, как правило, поддерживает один или несколько объектно-ориентированных языков - C++, Java, Smalltalk, Object Lisp и т.п. В своих программах разработчики используют объекты и структуры, которые помещаются в базу данных. Чтобы сохранить их в базе не требуется особых усилий. Создатели объектных СУБД стараются максимально облегчить жизнь разработчика программ, поэтому сохранение объектов обеспечивается прозрачным образом. Программист использует единый язык программирования для создания логики приложения, разработки интерфейса и общения с базой данных. В сочетании с визуальными средствами разработки создание прикладных программ может быть проведено с минимальными затратами средств и времени.
Продемонстрируем отличие в написании программ на небольшом примере. Пусть надо занести в базу данных сведения о человеке: его имя, возраст и фамилию непосредственного начальника. Для определенности будем считать, что сведения хранятся в реляционной таблице ПЕРСОНАЛ, которая имеет поля ИМЯ, ВОЗРАСТ и НАЧАЛЬНИК. Чтобы добавить в реляционную базу человека по фамилии Иванов, 30 лет, у которого начальник по фамилии Сидоров, на языке SQL надо написать примерно такое выражение:
Подразумевается, что сведения о Сидорове присутствует в этой же таблице, у него тоже есть начальник, у того - тоже и так далее. Как видим, все делается довольно просто, но когда нам надо, например, извлечь информацию о всех начальниках Иванова, при выборке следующей записи инициируется процесс поиска строки по первичному ключу в первом столбце таблицы, что разумеется, отрицательно скажется на скорости выполнения запроса. Ситуация, когда для программирования используется язык высокого уровня, а запросы отправляются с него в реляционную базу, не слишком отличается от приведенной выше. Например, фрагмент программы на C++, выполняющий добавление новой записи может быть таким:
Наконец, запишем то же самое, но сохраним данные в объектной базе. Рассматриваемый ниже пример иллюстрирует подход, используемый в СУБД POET (разработчик - POET Software GmbH). Данные о человеке присутствуют в объекте класса TPerson, объявленного следующим образом:
Обратим внимание на слово persistent в объявлении класса. Оно означает, что объекты типа TPerson будут сохраняться в базе данных. Русский эквивалент термина persistent - "стабильный", поэтому будем называть такие объекты стабильными. Стабильность - это свойство объекта сохранять состояние между сеансами работы программы. Объектная база данных - это, по существу, хранилище стабильных объектов. Достигается это, в зависимости от реализации, либо введением в язык программирования нового ключевого слова, либо предоставлением специального метода для создания объектов, либо наследованием от специального предопределенного типа. Программисту, таким образом, достаточно объявить объект "стабильным", а далее СУБД берет на себя черновую работу
по отслеживанию изменений, отмене ссылок на удаленные объекты, созданию версий объектов. Добавление нового объекта, в котором собраны сведения об Иванове, в нашем случае выглядит так:Обратим внимание на последний параметр. В объектной СУБД ссылка на непосредственного начальника хранится в виде указателя, для перехода к объекту "Сидоров" не выполняется никакого поиска.
Помимо стабильности, объектная СУБД предоставляет широкий набор средств управления базой. Можно назвать: управление транзакциями, когда программист на уровне исходного текста задает начало и конец процесса транзакции. Возможна блокировка базы или набора объектов, которые в ней сохранены. На клиентском месте можно узнать, как протекает инициированный клиентом запрос. Получив такую информацию
, пользователь либо будет ждать завершения процесса, либо прервет его. В качестве языка запросов используются различные реализации OQL - Object Query Language, объектного языка запросов. Это, как правило, расширение SQL (Structured Query Language, стандарт запросов в мире СУБД), дополненное объектными свойствами, средствами описания типов данных, итерации по объектам в СУБД.Естественно, объектные СУБД реализуют весь набор функций, традиционно присущих системам управления базами данных, плюс возможности объектного программирования. Таким образом, мы получаем все преимущества СУБД наряду с мощным объектным языком программирования объектов базы - Рисунок 3.1.
Рис. 3.1. Свойства объектной СУБД как симбиоз возможностей базы данных и объектных языков программирования
В верхней части рисунка собраны "краеугольные камни" концепции объектного программирования.
Наследование, инкапсуляция данных и полиморфизм уже были рассмотрены выше.
Идентификация объектов
– - это присвоение объекту уникального идентификатора, таким образом, каждый объект в СУБД уникален. Обычно уникальный идентификатор невидим, его "знает" только СУБД, но он не изменяется ни при каких обстоятельствах, несмотря на модификацию объекта вплоть до его удаления.Вкратце рассмотрим терминологию, используемую для описания функциональности объектной базы данных.
Восстанавливаемость - обязательный атрибут СУБД. Система должна адекватно реагировать на сбои в прикладных программах, которые выполняют обмен данными с базой, сбои операционной системы и повреждения носителей информации. Ведение журнала изменений, транзакции, хранение избыточных данных обеспечивают достаточную надежность работы базы данных.
Транзакции
- механизм, обеспечивающий фиксацию состояния базы на момент начала какой-либо критической операции и возвращение к этому состоянию в случае неудачного выполнения операции.Целостность данных - имеется в виду как структурная, так и логическая целостность базы данных. Кроме того, для объектных СУБД важно поддержание соответствия между объектами в базе и объектами, переданными клиенту.
Параллелизм - механизм, который гарантирует успешное разрешение конфликтов, возникающих при одновременном доступе к одним и тем же данным.
Стабильность
- как уже упоминалось ранее, это свойство СУБД сохранять данные программы между сеансами работы. Применительно к объектным СУБД означает сохранение данных объектов, объявленных как стабильные.Безопасность данных - одно из ключевых понятий в мире СУБД, поскольку часто в базах хранится конфиденциальная, а подчас и секретная информация.
Запросы - для любой серьезной базы данных обязателен механизм выполнения незапланированных запросов. Причем требуется такой язык запросов, который бы не требовал знания информации о том, как найти объекты в базе данных.
Версионность - поддержка на уровне СУБД многих версий одного объекта. Например, данные объекта могут многократно изменяться, а в базе храниться все версии объекта.
Архивирование - поскольку в базах могут накапливаться огромные объемы информации (терабайты, а вскоре и пентабайты данных), надо максимально задействовать средства программного сжатия данных.
Все вышеперечисленные аспекты необходимо учитывать при выборе СУООБД.
Site of Information
Technologies Designed by inftech@webservis.ru. |
|