Объектно-ориентированные базы данных - основные концепции, организация и управление: краткий обзор
Страница 7. Проблемы выполнения и оптимизации запросов к ООБД


Проблемы выполнения и оптимизации запросов к ООБД

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

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

Как мы видели на примерах конкретных систем в предыдущем разделе, в них по сути дела применяется тот же подход к оптимизации запросов, который использовался в реляционных системах: формируется набор альтернативных планов, оценивается стоимость каждого из них и выбирается план с наименьшей стоимостью. (Подробный обзор современных методов оптимизации запросов в реляционных СУБД и нерешенных проблем можно найти в [106].) Возможность применения такого подхода в СУБД ORION и O2 (да и в других) опирается на то, что объекты в этих системах не полностью инкапсулированы. Наряду с методами, в объектах видны и некоторые атрибуты, и если условие выборки задано через эти атрибуты, оптимизатор запросов, которому известны внутренняя структура объектов и набор существующих индексов, получает возможность выбора. Если же условие выборки можно формулировать только через методы, при подходах ORION и O2 единственным возможным способом выборки объектов класса будет последовательный просмотр всех объектов этого класса.

Здоник [7] отмечает, что основная проблема с оптимизацией запросов к ООБД связана с расширяемостью набора типов в такой БД. Каждый новый тип вводит собственную алгебру, неизвестную оптимизатору запросов. Например, оптимизатор не имеет информации о возможной коммутативности двух операций типа и т.д. Здоник полагает, что возможному решению проблемы оптимизации могло бы способствовать формальное определение алгебраических свойств операций типа при его разработке. Примерно такой подход применяется в оптимизаторах, основанных на наборе правил, применяемых в расширяемых СУБД (например, [107]).

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

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

 
« Предыдущая статья