Обзор по объектно-ориентированным базам данных, включающим средства разработки.
Немного об объектных базах данных
Любая СУБД основана на определенной модели данных. В конце 70-х гг. наибольшую популярность приобрели реляционные модели данных, которые и сегодня довольно широко распространены. Однако все большее число разработчиков пользовательских приложений для СУБД сталкиваются с тем, что применение реляционных моделей не обеспечивает требования, предъявляемые к срокам разработки проектов и скорости обработки запросов, особенно в случае проектирования систем, предназначенных для хранения сложных неструктурированных данных. Поэтому крупнейшие разработчики СУБД стали встраивать в свои продукты поддержку объектной ориентации. По соображениям совместимости предлагается смешанный подход - объектно-реляционный. Компании IBM и Oracle радикально разрешили эту проблему, переработав ядра своих СУБД (DB2 и Oracle) и расширив возможности работы с объектами. Фирма Informix приобрела объектно-реляционную СУБД Illustra и встроила ее в свои продукты. Компания Computer Associates, выпустившая несколько лет назад удачную реляционную СУБД Ingres с возможностью добавления сложных типов данных - предтечу нынешних универсальных серверов - и интерфейсом с объектными языками, в 1996 г. приобрела продукт Jasmine (разработку лаборатории фирмы Fujitsu) и теперь активно продвигает ее на рынок. Это иллюстрирует противоречивую ситуацию, сложившуюся на стыке объектных языков программирования и современных средств хранения данных.
Для языков, поддерживающих сложные структуры данных, требуется адекватная модель базы данных (рис. 1). И хотя существуют объектные дополнения и возможности расширения, как, например, у универсального сервера Informix, ядро базы остается ориентированным на работу с реляционными данными, что снижает производительность, так как СУБД при обмене с хранилищем данных должна производить сборку-разборку объектов.
Объектные и реляционные СУБД
В чем же принципиальное различие реляционных и объектных баз данных? Мэри Лумис, один из идеологов СУБД Versant, так оценила объектный подход к базам данных: "Эта модель данных более близка сущностям реального мира. Объекты можно сохранять и использовать непосредственно, не раскладывая по таблицам. Типы данных определяются разработчиком и не ограничиваются набором предопределенных типов". В таких СУБД данные объекта и методы его описания помещаются в хранилище как единое целое. Подобная СУБД обеспечивает запись объектов в базу данных "как есть", т. е. "все, что вы запрограммировали, вы помещаете в базу данных".
Особенности программирования объектной СУБД
Создание программ для объектных баз существенно отличается от написания приложений, взаимодействующих с реляционными СУБД. Объектная система, как правило, поддерживает один или несколько объектно-ориентированных языков - Cи++, Java, Смолток, ObjectLisp и т. п. В программах используются объекты и структуры, которые помещаются в базу данных, и для их хранения в базе не требуется прикладывать особые усилия. Создатели объектных СУБД стараются максимально облегчить жизнь программисту, поэтому сохранение объектов обеспечивается прозрачным образом, т. е. благодаря применению одного языка программирования для создания логики приложения, разработки интерфейса и общения с базой данных с помощью визуальных средств, и поэтому прикладные программы могут быть выполнены с минимальными затратами средств и времени.
Объединение возможностей СУБД и объектного программирования
Покажем на небольшом примере различие в написании программ. Допустим, необходимо занести в базу данных такие сведения о сотруднике, как имя и возраст, а также фамилию непосредственного начальника. Предположим, что сведения хранятся в реляционной таблице "персонал", которая имеет поля "имя", "возраст" и "начальник". При добавлении в реляционную базу сведений о сотруднике Иванове, 30 лет, у которого начальник по фамилии Сидоров, на языке SQL надо написать текст:
INSERT INTO PERSONAL VALUE(<<ИВАНОВ>>, 30, <<СИДОРОВ>>)
Сведения о Сидорове в таблице уже имеются, он также имеет начальника, а последний - тоже, и т. д. Все делается довольно просто, но если, например, необходимо извлечь информацию о всех начальниках Иванова, то при выборке следующей записи инициируется процесс поиска строки по первичному ключу в первом столбце таблицы, что снижает скорость выполнения запроса. Если же для программирования используется язык высокого уровня, а запросы отправляются с него в реляционную базу, то ситуация практически не изменится. Так, фрагмент программы на Cи++, добавляющий новую запись, может иметь вид:
TTable *pTable=new TTable(); pTable->Assign("Personal"); TVarRecord newrec; newrec.Add("ИВАНОВ"); newrec.Add(30); newrec.Add("СИДОРОВ"); pTable->AppendRecord(&newrec); pTable->Close(); delete pTable;
Теперь запишем то же самое, но сохраним данные в объектной базе. Пример, рассматриваемый ниже, иллюстрирует подход, принятый в СУБД Poet фирмы Poet Software GmbH. Данные о сотруднике присутствуют в объекте класса TPerson, объявленного следующим образом:
persistent class TPerson { char *m_pszName; int m_iAge; TPerson *m_pChief; public: TPerson(char *pszName, int Age, TPerson *pChief){ //реализация конструктора } };
Обратите внимание на слово persistent (стабильный) в объявлении класса, означающее, что объекты типа TPerson будут сохраняться в базе данных. Далее будем называть такие объекты стабильными, сохраняющими свое состояние между сеансами работы программы. Объектная база данных, по существу представляющая собой хранилище стабильных объектов, может образовываться различными способами в зависимости от реализации: введением в язык программирования нового ключевого слова, предоставлением специального метода для создания объектов или наследованием от специального предопределенного типа. Таким образом, программисту достаточно объявить объект "стабильным", а затем уже СУБД сама отслеживает изменения, отменяет ссылки на удаленные объекты и создает версии объектов. В нашем случае добавление нового объекта, в котором собраны сведения об Иванове, выглядит так:
TPerson *pIvanov =new TPerson("ИВАНОВ", 30, pSidorov);
Что касается последнего параметра, то в объектной СУБД ссылка на непосредственного начальника хранится в виде указателя, и для перехода к объекту "Сидоров" не выполняется никакого поиска.
Объектная СУБД предоставляет широкий набор средств управления базой, а именно: управление транзакциями (когда программист на уровне исходного текста задает их начало и конец); блокировку базы или набора сохраненных в ней объектов; получение на клиентском месте сведений о том, как проходит инициированный клиентом запрос, чтобы либо ждать завершения процесса, либо прервать его. В качестве языка запросов используются различные варианты объектного языка запросов (OQL - Object Query Language), расширенный SQL, дополненный объектными свойствами, средствами описания типов данных и итерации по объектам в базе данных.
Объектные системы реализуют набор функций, традиционно присущих СУБД, дополняемый возможностями объектного программирования. Таким образом, они получают преимущества СУБД наряду с мощным объектным языком программирования объектов.
"Краеугольными камнями" концепции объектного программирования являются следующие, ранее не упоминавшиеся в обзоре:
- наследование, инкапсуляция данных и полиморфизм, подробнейшую информацию о которых можно найти в любом руководстве по программированию, например в книге Гради Буча "Объектно-ориентированное программирование" (М.: Мир, 1992).
- идентификация объектов - присвоение каждому объекту СУБД уникального идентификатора, обычно невидимого; его "узнает" лишь СУБД, и он не изменяется при любых модификациях объекта вплоть до удаления.
Вкратце поясним терминологию, используемую для описания функциональности объектной базы данных:
- целостность данных - имеется в виду как структурная, так и логическая целостность базы данных, а для объектных СУБД важно поддержание соответствия между объектами в базе и объектами, переданными клиенту;
- параллелизм - механизм, гарантирующий успешное разрешение конфликтов, возникающих при одновременном доступе к одним и тем же данным;
- восстанавливаемость - обязательный атрибут СУБД. Система должна адекватно реагировать на сбои в прикладных программах, которые выполняют обмен данными с базой, сбои операционной системы и повреждения носителей информации. Ведение журнала изменений, транзакции, хранение избыточных данных обеспечивают достаточную надежность работы базы данных;
- безопасность данных - одно из ключевых понятий в мире СУБД, поскольку часто в базах хранится конфиденциальная и даже секретная информация;
- версионность - поддержка на уровне СУБД многих версий одного объекта. Например, данные объекта могут многократно изменяться, а в базе будут храниться все версии объекта.
Наиболее яркой особенностью объектных баз данных можно считать объединение объектно-ориентированного программирования с технологией баз данных для создания интегрированной среды разработки приложений. В связи с этим стоит упомянуть объектную СУБД Jasmine фирмы Computer Associates, в которой имеется среда разработки приложений JADS (Jasmine Applications Developer System), по идеологии создания приложений напоминающая Delphi компании Borland.
В состав инструментария входит конструктор форм, которые можно собирать из визуальных элементов (кнопок, редакторов, картинок, кнопок выбора и т. п.) и программных (объектов, запросов, сообщений). JADS включает браузеры объектов базы данных, классов, а также удобный "помощник" для написания собственных программ методов.
Объектная база данных обеспечивает доступ к различным источникам данных (в том числе к реляционным СУБД), а также разнообразные средства манипуляции с объектами (рис. 3). Это интерфейсы СУБД с объектными языками программирования Cи++, Java, Смолток и набор ActiveX-элементов (модулей, воспринимающих высокоуровневые команды от приложений VisualBasic, Delphi и т. п.), применяемых разработчиком в своей программе для работы с СУБД. Так, с помощью ODBC (Open Database Connectivity - драйвер доступа к базам данных) к данным объектной базы получают доступ программы, использующие SQL. Если такая СУБД включает ORB-модуль (Object Request Broker, брокер объектных запросов) - средство взаимодействия объектных приложений по протоколу CORBA (Common Object Request Brokers Architecture, общая архитектура брокеров объектных запросов), то для ее объектов открывается путь в сети, в том числе и в Internet.
Интерфейс объектной базы данных
В современных технологиях без стандартов не обойтись, особенно разработчикам приложений. Не составляют исключения и технологии объектных СУБД. Поэтому в 1992 г. ведущие разработчики объектных СУБД образовали группу ODMG (Object Database Management Group) по выработке и согласованию стандартов. Специфика ее деятельности заключается не в создании новых стандартов, а в развитии уже существующих в OMG (Object Management Group ANSI, группа выработки стандартов объектного программирования) и разработке порядка их использования для достижения совместимости конечных прикладных программ с интерфейсом любой объектной СУБД. К настоящему времени выработаны стандарты объектной модели данных ODL (Object Definition Language, языка описания объектов), языка запросов OQL (Object Query Language, дополнения языков программирования Cи++, Смолток, Java).
Объектная модель, установленная ODMG, базируется на модели группы OMG, созданной несколькими годами ранее. В дополнение к известным объектным концепциям в новом стандарте предложены расширения для обмена с базой данных, например вводятся понятия отношений между объектами, транзакций. ODL, являющийся расширением IDL (Interface Definition Language, языка определения интерфейсов объектов), предназначен только для описания интерфейса объекта с внешним миром, а реализацию базы он никак не затрагивает и не ограничивает. Следует иметь в виду, что IDL принят в качестве стандарта описания объектных интерфейсов в CORBA. OQL включает объектное расширение языка SQL-92 таким образом, что большинство запросов, адресованных реляционной СУБД, будут выполняться и в объектных базах данных. Стандарт ODMG осуществляет поддержку операций над стабильными объектами, помогает встраивать в программы на Cи++, Смолток, Java выражения на языке OQL и содержит средства управления транзакциями и средства навигации по объектам базы данных.
Использование объектных СУБД
Какие же объектные СУБД присутствуют на рынке? Несмотря на довольно "юный" возраст, объектные СУБД вышли на уровень коммерческих продуктов и показали высокие производительность и надежность, а также хорошую вместительность. Однако следует отметить недостаток информации и отставание по срокам в маркетинговых программах. С выходом Jasmine положение может измениться в лучшую сторону. На российском рынке пока, к сожалению, продукция разработчиков объектных баз представлена весьма скудно. В табл. 1 приведены данные о продуктах компаний - членов ODMG - объектных СУБД. Кроме того, в нее включены один из лидеров объектных баз - Ontos, и первый продукт, выпущенный "китом" компьютерного бизнеса CA - Jasmine, и российский продукт - ODB-Jupiter. В обзор намеренно не включены такие мощные объектно-реляционные базы данных, как Informix Universal Server, Universal Database DB2, Oracle 8.0, потому что объектность не заложена в самой их "природе", а является надстройкой над реляционным ядром.
Традиционными областями применения объектных СУБД являются системы автоматизированного проектирования (САПР), моделирование, мультимедиа, поскольку нуждами именно этих отраслей обусловлено новое направление в базах данных. Именно в этих областях всегда требовалось найти адекватное средство хранения больших объемов разнородных данных, переплетенных многими связями. Объектные СУБД отличаются высокими быстродействием и надежностью, а также предоставляют разнообразный программный интерфейс для разработчиков, поэтому широко используются в телекоммуникациях, в различных системах автоматизации предприятия, издательском деле, геоинформационных проектах. Они очень хорошо подходят для решения задач построения распределенных вычислительных систем. На основе объектной СУБД можно создавать сложные распределенные банки данных, организовать доступ к ним как через локальную сеть, так и для удаленных пользователей в режиме реального времени.
Быстродействие СУБД становится критичным параметром, когда требуется постоянно следить за состоянием рынка. Примером успешного решения подобных проблем является система Predator ("Хищник"), выполненная на базе ObjectStore, функционирующая в крупной финансовой компании "МакГрегор Гроуп". В режиме реального времени она снабжает оператора информацией о состоянии рынка инвестиций, предназначенной примерно для 3000 клиентов. Объектные СУБД используются такими известными компаниями, как Bankers Trust, Lehman Brothers. Система, работающая на бирже, обслуживает одновременно до 1000 запросов, адресованных к базе данных, причем клиенты не ощущают временных задержек. В финансовой группе Fannie Mae используется СУБД Pоеt, американский Citibank внедрил СУБД Objectivity/DB в программу CAOS, обрабатывающую платежи за пределами США. Та же СУБД используется в компании Lexis-Nexis для ведения базы документов с возможностью полнотекстового поиска.
DeutscheTelekom применяет объектную базу ObjectStore для организации информационного хранилища в intranet, СУБД Gemstone используется на форумах America Online, СУБД Poet - на форумах CompuServe. Объектные базы широко примененяются в Internet. Текст, картинки, видео и звук, из которых составляется Web-страница, хранятся в объектной СУБД как набор объектов, подготовленный к передаче пользователю, что обеспечивает быструю реакцию сервера на запрос. Естественное хранение мультимедиа - одна из сильнейших сторон объектных баз. Все большую популярность получают активные Web-серверы. Содержимое страниц они генерируют "на лету", широко используя язык Java. Практически все крупнейшие разработчики объектных СУБД сделали Java одним из основных языков программирования своих СУБД.
В табл. 2 приведены сведения об областях применения основных коммерческих объектных СУБД, полученные из материалов, помещенных на свои серверы в Internet фирмами-разработчиками, а также представлена отечественная объектная СУБД ODB-Jupiter.
Заключение
Завершая обзор, можно сделать вывод: если необходимо создавать корпоративные приложения, то имеется возможность выбора СУБД - объектных, реляционных и объектно-реляционных.
Пользователи DB2, Oracle или Ingres, скорее всего, предпочтут новые продукты этих же разработчиков, ибо для них важна преемственность в использовании программных наработок и накопленных данных. Не следует закрывать глаза на то, что это отработанная и отлаженная технология, хорошо себя зарекомендовавшая на протяжении двух десятилетий и вполне подходящая для финансовых, статистических и коммерческих приложений. Однако со стороны объектных СУБД нарастает давление и в этих сферах, причем весомым аргументом является поддержка данных реляционных баз и SQL, а также существующих программных наработок наряду с предоставлением пользователям преимуществ объектных технологий.
А. М. Андреев - канд.техн. наук, доцент МГТУ им. Н. Э. Баумана, Д. В. Березкин - канд. техн. наук и Ю. А. Кантонистов - сотрудники НПЦ "Интелтек Плюс". Контактный тел.: (095) 177-80-28