- •Глава 13. Семантическое моделирование
- •Часть III Проектирование базы данных
- •Часть IV
- •14.1. Введение
- •14.2. Транзакции
- •14.3. Восстановление транзакции
- •14.4. Восстановление системы
- •14.5. Восстановление носителей
- •14.6. Двухфазная фиксация
- •14.7. Поддержка языка sql
- •14.8. Резюме
- •15.1. Введение
- •15.2. Три проблемы параллельности
- •15.3. Блокировка
- •15.4. Устранение трех проблем параллельности
- •15.5. Взаимная блокировка
- •15.6. Упорядочиваемость
- •15.7. Уровни изоляции
- •15.8. Блокировка намерения
- •15.9. Средства языка sql
- •15.10. Резюме
- •Часть V
- •16.1. Введение
- •16.2. Избирательная схема управления доступом
- •16.3. Мандатная схема управления доступом
- •16.4. Статистические базы данных
- •16.5. Шифрование данных
- •16.6. Средства языка sql
- •16.7. Резюме
- •17.1. Введение
- •17.2. Пример выполнения оптимизации
- •17.3. Оптимизация запросов
- •17.4. Преобразование выражений
- •17.5. Статистические показатели базы данных
- •17.6. Стратегия по принципу "разделяй и властвуй"
- •17.7. Реализация реляционных операторов
- •17.8. Резюме
- •18.1. Введение
- •18.2. Обзор концепции трехзначной логики
- •18.3. Некоторые следствия изложенной схемы
- •18.4. Отсутствующие значения и ключи
- •18.5. Внешнее соединение
- •18.6. Специальные значения
- •18.7. Поддержка неопределенных значений в языке sql
- •18.8. Резюме
- •Глава 19
- •19.1. Введение
- •19.2. Иерархия типов
- •19.3. Полиморфизм и заменимость
- •19.4. Переменные и операция присвоения
- •19.5. Специализация по ограничениям
- •19.6. Операции сравнения
- •19.7. Операторы, версии и сигнатуры
- •19.8. Является ли окружность эллипсом
- •19.9. Пересмотр специализации ограничением
- •19.10. Резюме
- •20.1. Введение
- •20.2. Предварительные сведения
- •20.3. Двенадцать основных целей
- •1. Локальная независимость
- •2. Отсутствие опоры на центральный узел
- •3. Непрерывное функционирование
- •4. Независимость от расположения
- •5. Независимость от фрагментации
- •6. Независимость от репликации
- •7. Обработка распределенных запросов
- •8. Управление распределенными транзакциями
- •9. Аппаратная независимость
- •10. Независимость от операционной системы
- •11. Независимость от сети
- •12. Независимость от типа субд
- •20.4. Проблемы распределенных систем
- •Транзакция т1х
- •20.5. Системы "клиент/сервер"
- •20.6. Независимость от субд
7. Обработка распределенных запросов
Существуют две особенности, касающиеся темы этого раздела, которые необходимо предварительно прокомментировать.
Во-первых, рассмотрим запрос "Получить сведения о лондонских поставщиках крас- ных деталей". Предположим, что пользователь работает на узле в Нью-Йорке, а дан- ные размещены на узле в Лондоне. Предположим также, что имеется п поставщиков, которые удовлетворяют данному запросу. Если система реляционная, то выполнение данного запроса будет, по существу, включать пересылку двух сообщений: одно — с запросом из Нью-Йорка в Лондон, а другое — с возвращаемым результатом, т.е. набо- ром из л кортежей, пересылаемых из Лондона в Нью-Йорк. Если, с другой стороны, система не реляционная и использует операции с таблицами на уровне отдельных за- писей, выполнение запроса будет, по существу, включать пересылку 2п сообщений — л сообщений из Нью-Йорка в Лондон, которые запрашивают "следующего" поставщи- ка, и л сообщений из Лондона в Нью-Йорк, которые возвращают сведения об "очередном" поставщике. Этот пример показывает, что по производительности рас- пределенная реляционная система может на порядок превосходить не реляционную.
Во-вторых, оптимизация в распределенных системах даже более важна, нежели в централизованных. Суть в том, что для запроса, подобного рассмотренному выше, может потребоваться обращение к нескольким узлам. В такой системе может быть много возможных способов пересылки данных, позволяющих выполнить рассмат- риваемый запрос. Поэтому крайне важно, чтобы была найдена эффективная стра- тегия. Например, запрос для, скажем, объединения отношения Rx, хранимого на узле X, и отношения Ry, хранимого на узле Y, может быть выполнен посредством пересылки отношения Rx на узел У или отношения Ry на узел X, или обоих отно- шений на какой-либо узел Z и т.п. Неопровержимая иллюстрация важности опти- мизации, включающая упомянутый выше запрос ("Получить сведения о лондон- ских поставщиках красных деталей"), представлена в разделе 20.4. Подводя крат- кий итог этого примера, можно отметить, что по вопросу обработки данного за- проса анализируется шесть различных стратегий с учетом определенного набора вероятных допущений. В результате показано, что время ответа в каждом случае различно и изменяется в широких пределах от минимального (от одной до десяти секунд) до максимального (около шести часов!). Таким образом, оптимизация,
несомненно, весьма критична для распределенной системы и, кроме того, на эту особенность можно взглянуть, как на еще одну причину, по которой распределен- ные системы всегда должны быть реляционными (ответ прост: реляционные сис- темы позволяют оптимизировать обработку запросов, а не реляционные — нет).
8. Управление распределенными транзакциями
Как известно, существует два главных аспекта управления транзакциями, а именно: управление восстановлением и управление параллельностью обработки. Оба этих аспекта имеют расширенную трактовку в среде распределенных систем. Чтобы разъяснить особен- ности этой расширенной трактовки, сначала необходимо ввести новое понятие агент. В распределенной системе отдельная транзакция может включать в себя выполнение кода на многих узлах, в частности это могут быть операции обновления, выполняемые на несколь- ких узлах. Поэтому говорят, что каждая транзакция содержит несколько агентов, где под агентом подразумевается процесс, который выполняется для данной транзакции на отдель- ном узле. Система должна знать, что два агента являются элементами одной и той же тран- закции, например два агента, которые являются частями одной и той же транзакции, оче- видно, не должны оказываться в состоянии взаимной блокировки.
Теперь обратимся непосредственно к управлению восстановлением. Чтобы обеспе- чить атомарность транзакции (принцип "все или ничего") в распределенной среде, сис- тема должна гарантировать, что все множество относящихся к данной транзакции аген- тов или зафиксировало свои результаты, или выполнило откат. Такого результата можно достичь с помощью протокола двухфазной фиксации транзакции, который уже обсуж- дался в главе 14, хотя это обсуждение и не было прямо связано с распределенными сис- темами. Подробнее об использовании протокола двухфазной фиксации в распределен- ных системах речь пойдет в разделе 20.4.
Что касается управления параллельностью, то оно в большинстве распределенных систем базируется на механизме блокирования, точно так, как и в не распределенных системах. В нескольких более новых коммерческих продуктах была реализована много- вариантная блокировка данных [15.1]. Однако на практике обычное блокирование еще, кажется, по-прежнему остается тем методом, который выбирается в большинстве систем. Подробнее этот вопрос также будет обсуждаться в разделе 20.4.