КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Языки программирования объектно-ориентированных баз данных
К настоящему моменту неизвестен какой-либо язык программирования ООБД, который был бы спроектирован целиком заново, начиная с нуля. Естественным подходом к построению языков программирования ООБД было использование (с необходимыми расширениями) некоторого существующего объектно-ориентированного языка. Одним из первых созданных для реализации объектно-ориентированного и функционального подходов к программированию является язык Лисп (Common Lisp). Потребность более эффективной реализации заставляет в качестве основы объектно-ориентированного языка использовать известные языки программирования Basic и Си++. Потребность в поддержании в объектно-ориентированной СУБД не только языка (или семейства языков) программирования ООБД, но и развитого языка запросов в настоящее время признается практически всеми разработчиками. Система должна поддерживать легко осваиваемый интерфейс, прямо доступный конечному пользователю в интерактивном режиме. Наиболее распространенный подход к организации интерактивных интерфейсов с объектно-ориентированными системами баз данных основывается на использовании так называемых обходчиков. В этом случае конечный интерфейс обычно является графическим. На экране отображается схема (или подсхема) ООБД, и пользователь осуществляет доступ к объектам в навигационном стиле. Некоторые исследователи считают, что в этом случае разумно игнорировать принцип инкапсуляции объектов и предъявлять пользователю свойства объектов. В большинстве существующих систем ООБД подобный интерфейс существует, но всем понятно, что навигационный язык запросов — это в некотором смысле шаг назад по сравнению с языками запросов даже реляционных систем. Ненавигационные языки запросов. В настоящее время существует три подхода к разработке таких языков. Первый подход заключается в расширении языков запросов реляционных систем. Наиболее распространены языки с синтаксисом, близким к языку SQL. Это связано, конечно, с общим признанием и чрезвычайно широким распространением этого языка. Второй подход основывается на построении полного логического объектно-ориентированного языка исчисления. Третий подход основывается на применении декларативного и объектно-ориентированного методов программирования. Независимо от применяемого при создании языка запросов подхода перед разработчиками встает одна концептуальная проблема, решение которой не укладывается в традиционный объектно-ориентированный подход. Исходя из концепции ООБД основой для формулирования запроса должен служить класс, представляющий в ООБД множество однотипных объектов. Но что может представлять собой результат запроса? Набор основных понятий объектно-ориентированного подхода не содержит подходящего к данному случаю ответа. Обычно из положения выходят, расширяя базовый набор концепций множества объектов и полагая, что результатом запроса является некоторое подмножество объектов — экземпляров класса. Это довольно ограниченный подход, поскольку автоматически исключается возможность наличия в языке запросов средств, аналогичных реляционному оператору соединения. Проблемы оптимизации запросов. Основной целью оптимизации запроса в системе ООБД является создание оптимального плана его выполнения с использованием доступа к внешней памяти данной БД. Оптимизация запросов хорошо исследована и разработана в контексте реляционных БД. Известны методы синтаксической и семантической оптимизации на уровне непроцедурного представления запроса, алгоритмы выполнения элементарных реляционных операций, методы оценок стоимости планов запросов. Конечно, объекты могут иметь существенно более сложную структуру, чем кортежи плоских отношений, но не это различие является наиболее важным. Основная сложность оптимизации запросов к ООБД следует из того, что условия выборки формулируются в терминах внешних атрибутов объектов (методов), а для реальной оптимизации (т.е. для выработки оптимального плана) требуются условия, определенные внутренними атрибутами (переменными состояния). Похожая ситуация существует и в реляционных СУБД при оптимизации запроса к БД. В этом случае условия также формулируются в терминах внешних атрибутов (атрибутов представления), и в целях оптимизации запроса эти условия должны быть преобразованы в условия, определенные атрибутами хранимых отношений. Хорошо известным методом такой предоптимизации является подстановка представлений, что часто (хотя и не всегда в случае использования языка SQL) обеспечивает требуемые преобразования. В системах ООБД ситуация существенно усложняется двумя обстоятельствами. Во-первых, методы предоптимизации обычно программируются на некотором процедурном языке и могут иметь параметры, т.е. в общем случае тело метода представляет собой не просто арифметическое выражение, как в случае определения атрибутов представления, а параметризованную программу, содержащую ветвления, вызовы функций и методы описания других объектов. Во-вторых, точная реализация метода и даже структура объекта могут быть неизвестны во время компиляции запроса. Одним из подходов к упрощению проблемы оптимизации является открытие видимости некоторых (наиболее важных для этого) внутренних атрибутов объектов. В этом случае достаточно открыть некоторые внутренние атрибуты только для компилятора запросов, т.е. фактически запретить переопределять эти переменные в подклассах. С точки зрения пользователя открытые атрибуты имеют вид переменных без параметров, возвращающих значение соответствующего типа. Однако лучше было бы сохранить строгую вложенность объектов (чтобы избавить приложение от критической зависимости от реализации) и обеспечить возможность тщательного проектирования схемы ООБД с учетом потребностей оптимизации запросов. Общий подход к предоптимизации условий выборки для одного класса объектов может быть следующим. 1. Преобразовать логическую формулу условия выборки в конъюнктивную нормальную форму (КНФ). Не будем останавливаться на способе выбора конкретной КНФ, но, естественно, она должна быть хорошей (например, содержащей максимальное число атомарных конъюнктов). 2. Для каждого конъюнкта, включающего в себя методы с известным во время компиляции телом, заменить вызовы методов на их тела с подставленными параметрами. (Будем предполагать, что параметры не содержат вызовов функций или методов других объектов.) 3. Для каждого конъюнкта произвести все возможные упрощения, т.е. вычислить все, что можно вычислить в статике. 4. Если получены конъюнкты, представляющие собой простые предикаты сравнения на основе переменных состояния и констант, следует использовать их для выработки оптимального плана выполнения запроса. Если же такие конъюнкты получить не удалось, единственным способом удаления класса объектов является его последовательный просмотр с полным вычислением логического выражения для каждого объекта. Указанные ограничения не вызывают зависимости прикладной программы от особенностей реализации ООБД. Это обусловлено тем, что объекты БД могут быть определены семантически. ГЛАВА 16.ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ СУБД CACHE
Дата добавления: 2014-01-07; Просмотров: 1218; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |