Сергей Кузнецов
1. Реляционные системы
Хотя многие полагают, что реляционные СУБД, являясь наиболее распространенным
современным аппаратом построения информационных систем, не представляют уже интереса в
научном отношении, остается еще много нерешенных или решенных не полностью проблем. Об
этом свидетельствует поток статей, посвященных тематике чисто реляционных систем, а также
активная деятельность компаний-производителей коммерческих реляционных систем, стремящихся
улучшать свои продукты и придавать им новые качества.
Продолжающаяся работа исследователей затрагивают вопросы оптимизации запросов, новых
алгоритмов выполнения реляционных операций, оптимизации структур хранения данных и другие
аспекты, непосредственно определяющие эффективность СУБД. Те же самые вопросы занимают и
разработчиков коммерческих СУБД, которые, кроме того озабочены и более прикладными
проблемами. Рассмотрим немного более подробно (но без технических деталей) существо
некоторых из этих вопросов и то, каким образом они решаются в наиболее развитых
коммерческих продуктах.
Для всех современных коммерческих реляционных СУБД основным языком доступа к базам
данных является SQL. В 1989 г. появился первый международный стандарт этого языка, и
большинство производителей СУБД объявляют свои системы соответствующими этому стандарту.
Но стандарт 1989 г. был довольно ограниченным (например, в него не входили средства
манипулирования схемой БД, динамический SQL и т.д.), а многие вошедшие в стандарт аспекты
языка были специфицированы недостаточно строго. Поэтому разные реализации различаются в
достаточно важных вопросах.
В 1992 г. был принят новый стандарт SQL-92. Этот язык существенно более сложен, чем SQL-89, а
конструкции SQL-92 специфицированы в стандарте существенно более полно. Первой компанией,
которая объявила о соответствии своего продукта новому стандарту, была компания Oracle со
своей седьмой версией (это произошло прямо в 1992 г.). Теперь и все остальные компании обещают
вскоре выпустить продукты, соответствующие стандарту SQL-92.
Кроме того, как это бывает всегда, производители стремятся добавить к своим продуктам
качества, превышающие требования стандарта. Например, современные версии Oracle и Ingres
содержат возможности определения тригеров (подробнее об этом см. ниже), в системе uniVerse
компании VMark поддерживается расширенная ненормализованная реляционная модель и т.д.
Другими словами, компании стремятся смотреть в будущее, предвидя требования следующего
стандарта SQL (его условно называют SQL-3; ожидалось принятие этого стандарта в 1995 г., но
теперь уже говорят про 1997 г.).
Уже довольно давно развитые коммерческие СУБД основываются на архитектуре "клиент-сервер".
При этой организации наиболее трудоемкие операции над базами данных выполняются на
выделенном компьютере-сервере, который должен быть достаточно мощным и обладать
соответствующим набором ресурсов основной и внешней памяти. До поры серверная часть СУБД
обладала простой организацией: запросы, поступающие из клиентских частей системы,
обрабатывались последовательно с небольшой оптимизацией для совмещения процессорной
работы с работой устройств внешней памяти.
Однако с появлением на рынке мультипроцессорных симметричных аппаратных архитектур,
производители СУБД были вынуждены пересмотреть организацию своих серверов, допустив в них
внутреннюю параллельность. Естественно, это требует очень основательного перепроектирования
системы с ее существенным усложнением. Заметим, что в большинстве случаев компании пошли на
это после появления в ОС UNIX механизма "легковесных" процессов (threads).
О серьезности этой работы говорит тот факт, что, например, в компании Informix было
образовано новое подразделение, занимающееся исключительно вопросами распараллеливания
работы серверов.
Чтобы убедить новых потенциальных пользователей использовать новые продукты, компании-
производители должны обеспечить решение проблемы использования старых баз данных. В
принципе эта проблема является частным видом проблемы включения в открытые системы
компонентов, которые не были на это рассчитаны с самого начала.
В большинстве случаев предлагаемые решения основываются на использовании индустриальных
стандартов распределенных объектных систем (например, стандарта CORBA, разработанного
OMG). Тем не менее производители СУБД вынуждены решать многочисленные проблемы для
вхождения их систем в новые интегрированные среды.
2. Постреляционные системы
В этом разделе очень кратко рассматриваются основные направления исследований и разработок в
области так называемых постреляционных систем, т.е. систем, относящихся к следующему
поколению (хотя термин next-generation DBMS зарезервирован для некоторого подкласса
современных систем).
Одним из основных положений реляционной модели данных является требование нормализации
отношений: поля кортежей могут содержать лишь атомарные значения. Для традиционных
приложений реляционных СУБД - банковских систем, систем резервирования и т.д. - это вовсе не
ограничение, а даже преимущество, позволяющее проектировать экономные по памяти БД с
предельно понятной структурой. Запросы с соединениями в таких системах сравнительно редки,
для динамической поддержки целостности используются соответствующие средства SQL.
Однако с появлением эффективных реляционных СУБД их стали пытаться использовать и в менее
традиционных прикладных системах - САПР, системы искусственного интеллекта и т.д. Такие
системы обычно оперируют со сложно структурированными объектами, для реконструкции
которых из плоских таблиц реляционной БД приходится выполнять запросы, почти всегда
требующие соединения отношений. В соответствии с требованиями разработчиков
нетрадиционных приложений появилось направление исследований баз сложных объектов. Это
очень обширная область исследований, в которой затрагиваются вопросы моделей данных,
структур данных, языков запросов, управления транзакциями, журнализации и т.д. Во многом эта
область соприкасается с областью объектно-ориентированных БД.
По определению БД называется активной, если СУБД по отношению к ней выполняет не только те
действия, которые явно указывает пользователь, но и дополнительные действия в соответствии с
правилами, заложенными в саму БД.
Легко видеть, что основа этой идеи содержалась в языке SQL времени System R. На самом деле,
что есть определение триггера или условного воздействия как не введение в БД правила, в
соответствии с которым СУБД должна производить дополнительные действия? Плохо лишь то,
что на самом деле триггеры не были полностью реализованы ни в одной из известных систем, даже
и в System R. И это не случайно, потому что реализация такого аппарата в СУБД очень сложна,
накладна и не полностью понятна.
Среди вопросов, ответы на которые до сих пор не получены, следующие. Как эффективно
определить набор вспомогательных действий, вызываемых прямым действием пользователя?
Каким образом распознавать циклы в цепочке "действие-условие-действие-..." и что делать при
возникновении таких циклов? В рамках какой транзакции выполнять дополнительные условные
действия и к бюджету какого пользователя относить возникающие накладные расходы?
Масса проблем не решена даже для сравнительно простого случая реализации триггеров SQL, а
задача ставится уже гораздо шире. По существу, предлагается иметь в составе СУБД
продукционную систему общего вида, условия и действия которой не ограничиваются
содержимым БД или прямыми действиями над ней со стороны пользователя. Например, в условие
может входить время суток, а действие может быть внешним, например, вывод информации на
экран оператора. Практически все современные работы по активным БД связаны с проблемой
эффективной реализации такой продукционной системы.
Вместе с тем, по нашему мнению, гораздо важнее в практических целях реализовать в реляционных
СУБД аппарат триггеров. Заметим, что в проекте стандарта SQL3 предусматривается
существование языковых средств определения условных воздействий. Реализация и будет первым
практическим шагом к активным БД (как мы отмечали в разд.1, уже появились соответствующие
коммерческие реализации).
По определению, дедуктивная БД состоит из двух частей: экстенсиональной, содержащей факты, и
интенсиональной, содержащей правила для логического вывода новых фактов на основе
экстенсиональной части и запроса пользователя.
Легко видеть, что при таком общем определении SQL-ориентированную реляционную СУБД
можно отнести к дедуктивным системам. Действительно, что есть определенные в схеме
реляционной БД представления как не интенсиональная часть БД.
Основным отличием реальной дедуктивной СУБД от реляционной является то, что и правила
интенсиональной части БД, и запросы пользователей могут содержать рекурсию. Именно
возможность рекурсии делает реализацию дедуктивной СУБД очень сложной и во многих случаях
эффективно неразрешимой проблемой.
Мы не будем здесь более подробно рассматривать конкретные проблемы, применяемые
ограничения и используемые методы в дедуктивных системах. Отметим лишь, что обычно языки
запросов и определения интенсиональной части БД являются логическими (поэтому дедуктивные
БД часто называют логическими). Имеется прямая связь дедуктивных БД с базами знаний
(интенсиональную часть БД можно рассматривать как БЗ). Более того, трудно провести грань
между этими двумя сущностями; по крайней мере, общего мнения по этому поводу не
существует.
Какова же связь дедуктивных БД с реляционными СУБД, кроме того, что реляционная БД
является вырожденным частным случаем дедуктивной? Основным является то, что для реализации
дедуктивной СУБД обычно применяется реляционная система. Такая система выступает в роли
хранителя фактов и исполнителя запросов, поступающих с уровня дедуктивной СУБД. Между
прочим, такое использование реляционных СУБД резко актуализирует задачу глобальной
оптимизации запросов.
При обычном применении реляционной СУБД запросы обычно поступают на обработку по
одному, поэтому нет повода для их глобальной (межзапросной) оптимизации. Дедуктивная же
СУБД при выполнении одного запроса пользователя в общем случае генерирует пакет запросов к
реляционной СУБД, которые могут оптимизироваться совместно.
Конечно, в случае, когда набор правил дедуктивной БД становится велик и их невозможно
разместить в оперативной памяти, возникает проблема управления их хранением и доступом к ним
во внешней памяти. Здесь опять же может быть применена реляционная система, но уже не
слишком эффективно. Требуются более сложные структуры данных и другие условия выборки.
Известны частные попытки решить эту проблему, но общего решения пока нет.
Обычные БД хранят мгновенный снимок модели предметной области. Любое изменение в момент
времени t некоторого объекта приводит к недоступности состояния этого объекта в предыдущий
момент времени. Самое интересное, что на самом деле в большинстве развитых СУБД предыдущее
состояние объекта сохраняется в журнале изменений, но возможности доступа со стороны
пользователя нет.
Конечно, можно явно ввести в хранимые отношения явный временной атрибут и поддерживать его
значения на уровне приложений. Более того, в большинстве случаев так и поступают. Недаром в
стандарте SQL появились специальные типы данных date и time. Но в таком подходе имеются
несколько недостатков: СУБД не знает семантики временного поля отношения и не может
контролировать корректность его значений; появляется дополнительная избыточность хранения
(предыдущее состояние объекта данных хранится и в основной БД, и в журнале изменений); языки
запросов реляционных СУБД не приспособлены для работы со временем.
Существует отдельное направление исследований и разработок в области темпоральных БД. В
этой области исследуются вопросы моделирования данных, языки запросов, организация данных
во внешней памяти и т.д. Основной тезис темпоральных систем состоит в том, что для любого
объекта данных, созданного в момент времени t1 и уничтоженного в момент времени t2, в БД
сохраняются (и доступны пользователям) все его состояния во временном интервале [t1,t2].
Исследования и построения прототипов темпоральных СУБД обычно выполняются на основе
некоторой реляционной СУБД. Как и в случае дедуктивных БД темпоральная СУБД - это
надстройка над реляционной системой. Конечно, это не лучший способ реализации с точки зрения
эффективности, но он прост и позволяет производить достаточно глубокие исследования.
Примером кардинального (но может быть, преждевременного) решения проблемы темпоральных
БД может служить СУБД Postgres. Эта система была разработана М.Стоунбрекера для
исследований и обучения студентов в университете г.Беркли, и он смело шел в ней на самые смелые
эксперименты.
Главными особенностями системы управления памятью в Postgres является, во-первых, то, что в
ней не ведется обычная журнализация изменений базы данных и мгновенно обеспечивается
корректное состояние базы данных после перевызова системы с утратой состояния оперативной
памяти. Во-вторых, система управления памятью поддерживает исторические данные. Запросы
могут содержать временные характеристики интересующих объектов. Реализационно эти два
аспекта связаны.
Основное решение состоит в том, что при модификациях кортежа изменения производятся не на
месте его хранения, а заводится новая запись, куда помещаются измененные поля. Эта запись
содержит, кроме того, данные, характеризующие транзакцию, производившую изменения (в том
числе и время ее завершения), и подшивается в список к изменявшемуся кортежу. В системе
поддерживается уникальная идентификация транзакций и имеется специальная таблица
транзакций, хранящаяся в стабильной памяти. Таким образом, после сбоев просто не следует
обращать внимание на хвостовые записи списков, относящиеся к незакончившемся транзакциям.
Синхронизация поддерживается на основе обычного двухфазного протокола захватов.
Отдельный компонент системы осуществляет архивизацию объектов базы данных. Он производит
сборку разросшихся списков изменявшихся кортежей и записывает их в область архивного
хранения. К этой области тоже могут адресоваться запросы, но уже только на чтение.
Система была ориентирована на использование оптических дисков с разовой записью и
стабильной оперативной памяти (хотя бы небольшого объема). При наличии таких технических
средств она выигрывает по эффективности даже при работе в традиционном режиме по сравнению
со схемой с журнализацией. Однако, возможна работа и на традиционной аппаратуре, тогда
эффективность системы слегка уступает традиционным схемам.
Соответствующие возможности работы с историческими данными заложены в язык Postquel (и в
этом его главное отличие от последних вариантов Quel). Возможна выборка информации,
хранившейся в базе данных в указанное время, в указанном временном интервале и т.д. Кроме
того, имеется возможность создавать версии отношений, и допускается их последующая
модификация с учетом изменений основных вариантов.
Направление интегрированных или федеративных систем неоднородных БД и мульти-БД
появилось в связи с необходимостью комплексирования систем БД, основанных на разных моделях
данных и управляемых разными СУБД.
Основной задачей интеграции неоднородных БД является предоставление пользователям
интегрированной системы глобальной схемы БД, представленной в некоторой модели данных, и
автоматическое преобразование операторов манипулирования БД глобального уровня в
операторы, понятные соответствующим локальным СУБД. В теоретическом плане проблемы
преобразования решены, имеются реализации.
При строгой интеграции неоднородных БД локальные системы БД утрачивают свою
автономность. После включения локальной БД в федеративную систему все дальнейшие действия с
ней, включая администрирование, должны вестись на глобальном уровне. Поскольку пользователи
часто не соглашаются утрачивать локальную автономность, желая тем не менее иметь
возможность работать со всеми локальными СУБД на одном языке и формулировать запросы с
одновременным указанием разных локальных БД, развивается направление мульти-БД. В системах
мульти-БД не поддерживается глобальная схема интегрированной БД и применяются специальные
способы именования для доступа к объектам локальных БД. Как правило, в таких системах на
глобальном уровне допускается только выборка данных. Это позволяет сохранить автономность
локальных БД.
Как правило, интегрировать приходится неоднородные БД, распределенные в вычислительной
сети. Это в значительной степени усложняет реализацию. Дополнительно к собственным
проблемам интеграции приходится решать все проблемы, присущие распределенным СУБД:
управление глобальными транзакциями, сетевую оптимизацию запросов и т.д. Очень трудно
добиться эффективности.
Как правило, для внешнего представления интегрированных и мульти-БД используется (иногда
расширенная) реляционная модель данных. В последнее время все чаще предлагается использовать
объектно-ориентированные модели, но на практике пока основой является реляционная модель.
Поэтому, в частности, включение в интегрированную систему локальной реляционной СУБД
существенно проще и эффективнее, чем включение СУБД, основанной на другой модели
данных.
Термин "системы следующего (или третьего) поколения" вошел в жизнь после опубликования
группой известных специалистов в области БД "Манифеста систем баз данных третьего
поколения". Сторонники этого направления придерживаются принципа эволюционного развития
возможностей СУБД без коренной ломки предыдущих подходов и с сохранением преемственности
с системами предыдущего поколения.
Частично требования к системам следующего поколения означают просто необходимость
реализации давно известных свойств, отсутствующих в большинстве текущих реляционных СУБД
(ограничения целостности, триггеры, модификация БД через представления и т.д.). В число новых
требований входит полнота системы типов, поддерживаемых в СУБД; поддержка иерархии и
наследования типов; возможность управления сложными объектами и т.д.
Одной из наиболее известных СУБД третьего поколения является система Postgres, а создатель
этой системы М.Стоунбрекер, по всей видимости, является вдохновителем всего направления. В
Postgres реализованы многие интересные средства: поддерживается темпоральная модель хранения
и доступа к данным и в связи с этим абсолютно пересмотрен механизм журнализации изменений,
откатов транзакций и восстановления БД после сбоев; обеспечивается мощный механизм
ограничений целостности; поддерживаются ненормализованные отношения (работа в этом
направлении началась еще в среде Ingres), хотя и довольно странным способом: в поле отношения
может храниться динамически выполняемый запрос к БД.
Одно свойство системы Postgres сближает ее с объектно-ориентированными СУБД. В Postgres
допускается хранение в полях отношений данных абстрактных, определяемых пользователями
типов. Это обеспечивает возможность внедрения поведенческого аспекта в БД, т.е. решает ту же
задачу, что и ООБД, хотя, конечно, семантические возможности модели данных Postgres
существенно слабее, чем у объектно-ориентированных моделей данных.
Хотя отнесение СУБД к тому или иному классу в настоящее время может быть выполнено только
условно (например, иногда объектно-ориентированную СУБД O2 относят к системам следующего
поколения), можно отметить три направления в области СУБД следующего поколения. Чтобы не
изобретать названий, будем обозначать их именами наиболее характерных СУБД.
Направление объектно-ориентированных баз данных (ООБД) возникло сравнительно давно.
Публикации появлялись уже в середине 1980-х гг. Однако наиболее активно это направление
развивается в последние годы. С каждым годом увеличивается число публикаций и реализованных
коммерческих и экспериментальных систем.
Возникновение направления ООБД определяется прежде всего потребностями практики:
необходимостью разработки сложных информационных прикладных систем, для которых
технология предшествующих систем БД не была вполне удовлетворительной.
Конечно, ООБД возникли не на пустом месте. Соответствующий базис обеспечивают как
предыдущие работы в области БД, так и давно развивающиеся направления языков
программирования с абстрактными типами данных и объектно-ориентированных языков
программирования.
Что касается связи с предыдущими работами в области БД, то наиболее сильное влияние на
работы в области ООБД оказывают проработки реляционных СУБД и следующее хронологически
за ними семейство БД, в которых поддерживается управление сложными объектами. Кроме того,
исключительное влияние на идеи и концепции ООБД и, как кажется, всего объектно-
ориентированного подхода оказал подход к семантическому моделированию данных (общее число
публикаций по семантическому моделированию поистине безгранично). Достаточное влияние
оказывают также развивающиеся параллельно с ООБД направления дедуктивных и активных
БД.
Среди языков и систем программирования наибольшее первичное влияние на ООБД оказал
Smalltalk. Этот язык сам по себе не является полностью пионерским, хотя в нем была введена новая
терминология, являющаяся теперь наиболее распространенной в объектно-ориентированном
программировании. На самом деле, Smalltalk основан на ряде ранее выдвинутых концепций.
Большое число работ не означает, что все проблемы ООБД полностью решены. Как отмечается в
Манифесте группы ведущих ученых, занимающихся ООБД, современная ситуация с ООБД
напоминает ситуацию с реляционными системами середины 1970-х гг. При наличии большого
количества экспериментальных проектов (и даже коммерческих систем) отсутствует общепринятая
объектно-ориентированная модель данных, и не потому, что нет ни одной разработанной полной
модели, а по причине отсутствия общего согласия о принятии какой-либо модели. На самом деле,
имеются и более конкретные проблемы, связанные с разработкой декларативных языков запросов,
выполнением и оптимизацией запросов, формулированием и поддержанием ограничений
целостности, синхронизацией доступа и управлением транзакциями и т.д.
Мы уже говорили, что основная практическая надобность в ООБД связана с потребностью в
некоторой интегрированной среде построения сложных информационных систем. В этой среде
должны отсутствовать противоречия между структурной и поведенческой частями проекта и
должно поддерживаться эффективное управление сложными структурами данных во внешней
памяти. С этой точки зрения языковая среда ООБД - это объектно-ориентированная система
программирования, естественно включающая средства работы с долговременными объектами.
"Естественность" включения средств работы с БД в язык программирования означает, что работа с
долговременными (хранимыми во внешней БД) объектами должна происходить на основе тех же
синтаксических конструкций (и с той же семантикой), что и работа со временными,
существующими только во время работы программы объектами.
Эта сторона ООБД наиболее близка родственному направлению языков программирования БД.
Языки программирования ООБД и БД во многих своих чертах различаются только
терминологически; существенным отличием является лишь поддержание в языках первого класса
подхода к наследованию классов. Кроме того, языки второго класса, как правило, более развиты
как в отношении системы типов, так и в отношении управляющих конструкций.
Что же касается связи ООСУБД с реляционными системами, то, как обычно, реляционные СУБД
являются основным инструментом при проведении исследовательских работ и прототипировании
объектно-ориентированных СУБД.
3. Распределенные СУБД
В теоретическом плане распределенные СУБД составляют еще одно измерение в пространстве
исследований и разработок систем управления базами данных. В этих системах приходится решать
все задачи, свойственные централизованным СУБД, но, как правило, в более сложных
постановках. Кроме того, в распределенных системах возникают и специфические проблемы, от
решения которых во многом зависит эффективность, надежность и доступность систем БД. В
настоящее время большинство распределенных СУБД базируется на реляционной модели данных и
рассчитано на использование в локальных сетях ЭВМ. Многие проблемы распространяются и на
распределенные СУБД в территориально разнесенных сетях, и почти все проблемы сохраняются
для распределенных СУБД, основанных на других моделях данных.
В централизованных системах БД очень распространено использование двухфазного протокола
синхронизационных захватов объектов БД. В соответствии с этим протоколом объект БД
автоматически захватывается транзакцией в соответствующем режиме при первом обращении, и
все захваты данной транзакции освобождаются только при ее завершении. В случае возникновения
конфликта по синхронизации транзакция блокируется, пока объект не будет освобожден.
Следование этому протоколу может привести к возникновению синхронизационного тупика между
двумя или более транзакциями. Задача СУБД - распознать появление тупика и разрушить его
путем отката одной или нескольких транзакций.
Распознавание тупиков сводится к обнаружению циклов в графе ожидания транзакций, что
является трудоемкой задачей даже в централизованных СУБД. В распределенных системах
решение этой задачи может потребовать неприемлемых накладных расходов (хотя поиски
алгоритмов с допустимыми затратами продолжаются).
Поэтому более часто в распределенных системах применяются протоколы синхронизации,
основанные на временных метках. Это направление само по себе очень широко, имеются разные
варианты и даже комбинации с протоколом двухфазных захватов, но основной проблемой
реализации является отсутствие в распределенной системе единого времени.
В истинно распределенной СУБД транзакции естественно утрачивают линейную структуру.
Распределенная транзакция в общем случае представляет собой дерево, промежуточными узлами
которого являются распределенные подтранзакции, а листья соответствуют обычным линейным
транзакциям локальных СУБД.
Основной проблемой управления транзакциями в этом случае является корректное завершение
(фиксация) распределенной транзакции. Классическим решением является использование давно
известного протокола двухфазной фиксации. Однако прямое использование этого протокола
порождает значительное число служебных сообщений между составляющими распределенную
систему локальными СУБД. Большое число исследований посвящено поискам более экономичных
протоколов.
Основным накладным расходом при выполнении распределенного запроса является пересылка
данных между узлами сети. Одним из способов сокращения этого накладного расхода является
поддержание копий наиболее часто используемых данных в нескольких узлах сети с учетом
порождаемых этим дополнительных накладных расходов по поддержанию согласованности копий
при модификации данных.
Другим основанием для поддержания копий является увеличение уровня доступности данных при
выходе из строя узлов сети или коммуникационных линий, вследствие чего утрачивается связность
сети. Теоретически доступ к некоторому объекту БД может продолжаться в любом разделе сети,
содержащем его копию. Однако приходится решать ту же проблему согласования копий при
изменениях объекта данных. Существует масса подходов к решению этой проблемы от полного
разрешения любого доступа к любой копии объекта во всех разделах сети с проведением сложной
процедуры согласования копий после восстановления связности сети до разрешения модификации
объекта только в одном разделе. Для обнаружения этого раздела обычно применяются различные
варианты алгоритма голосования.
Альтернативный подход, обеспечивающий максимальное распараллеливание выполнения запроса
к БД, состоит в том, что отношение (если говорить в терминах реляционной модели данных)
разбивается на ряд вертикальных или горизонтальных фрагментов, и эти фрагменты хранятся в
разных узлах сети.
Понятно, что теоретически это может обеспечить убыстрение выполнения запроса,
затрагивающего фрагментированное отношение, но практически добиться этого очень трудно.
Основная проблема состоит в резком расширении пространства поиска вариантов выполнения
запросов, с которым должен работать оптимизатор запросов.
Имеются предложения и исследования, связанные с комбинацией поддержания копий и
фрагментацией объектов БД. В этом случае поддерживаются копии фрагментов, что, вообще
говоря, решает обе задачи, но еще больше усложняет реализацию.
Даже если говорить только про реляционные распределенные СУБД, которые наиболее развиты в
теоретическом и практическом отношении, до сих пор проводится масса исследований в области
оптимизации алгоритмов выполнения реляционных операций (главным образом, соединения
удаленных отношений).
Таким образом, даже рассмотрев только небольшую часть проблем распределенных систем, можно
убедиться, что они нуждаются в большом количестве исследований и экспериментов. Начавшийся
в России переход к использованию локальных сетей дает практическую возможность проведения
таких работ.
4. Системы БД с многоуровневой защитой
Большинство реально используемых современных СУБД основано на реляционной модели данных
и языке баз данных SQL. Существенной особенностью языка SQL, появившейся в нем с самого
начала, является обеспечение защиты доступа к данным средствами самого языка. Основная идея
такого подхода состоит в том, что по отношению к любому отношению БД и любому столбцу
отношения вводится предопределенный набор привилегий. С каждой транзакцией неявно
связывается идентификатор пользователя, от имени которого она выполняется (способы связи и
идентификации пользователей не фиксируются в языке и определяются в реализации).
После создания нового отношения все привилегии, связанные с этим отношением и всеми его
столбцами, принадлежат только пользователю-создателю отношения. В число привилегий входит
привилегия передачи всех или части привилегий другому пользователю, включая привилегию на
передачу привилегий. Технически передача привилегий осуществляется при выполнении оператора
SQL GRANT. Существует также привилегия изъятия всех или части привилегий у пользователя,
которому они ранее были переданы. Эта привилегия также может передаваться. Технически
изъятие привилегий происходит при выполнении оператора SQL REVOKE. Проверка
полномочности доступа к данным происходит на основе информации о полномочиях,
существующих во время компиляции соответствующего оператора SQL.
Долгое время подход к защите данных от несанкционированного доступа принимался практически
без критики, однако в связи с распространяющимся использованием реляционных СУБД в
нетрадиционных приложениях все чаще раздается критика. Если, например, в системе БД должна
поддерживаться многоуровневая защита данных, соответствующую систему полномочий весьма
трудно, а иногда и невозможно построить на основе средств SQL.
Вопросам организации систем БД с развитыми механизмами защиты в последнее время уделяется
очень большое внимание. Можно выделить два основных подхода. Первый подход состоит в
связывании с каждым защищаемым объектом БД набора допустимых привилегий и связывании с
каждым пользователем некоторого набора прав доступа. Как таковая, эта техника известна еще со
времени первых ОС разделения времени, но при ее применении в области БД требуются
дополнительный анализ, уточнения и дополнения. Второй подход к защите данных основан на
использовании методов криптографии. На самом деле упрощенные криптографические методы
тоже использовались и используются в ОС для проверки прав доступа пользователя (в частности,
для кодирования паролей пользователей). Развитые же методы кодирования в основном
применялись в информационных системах специального назначения. Теперь же кодирование с
открытыми ключами все чаще применяется в системах общего назначения.