Скачиваний:
102
Добавлен:
02.05.2014
Размер:
2.3 Mб
Скачать

9.5. Моментальные снимки

* Моментальные снимки иногда иначе называют овеществленными представлениями [9.1], [9.3], [9.6], [9.14], [9.16]. Однако этот термин неудачен и его не рекомендуется использовать, поскольку овеществлены представления или нет — это вопрос реализации, а не модели. Что же касается модели, то в ее понимании представления не овеществляются по определению и тер­мин "овеществленное представление" является логической несообразностью.

Здесь будет уместно, несколько отклонившись от основной темы, обсудить понятие моментальных снимков (snapshots) [9.2]. Моментальные снимки в действительности имеют много общего с представлениями8, но не следует путать эти понятия. Как и пред­ставления, моментальные снимки — это производные переменные-отношения, но в от­личие от представлений снимки реальны, а не виртуальны, т.е. снимки представляются в базе данных не только своими определениями в терминах других переменных-отноше­ний, но и (по крайней мере, концептуально) собственной овеществленной копией дан­ных, как, например, показано ниже.

VM P2SC SNAPSHOT

( ( S JOIN SP ) WHERE Pi = PI ( 'P2' ) ) {Si, CITY } REFRESH EVERY DAY ;

Определение моментального снимка во многом подобно выполнению запроса, за ис­ключением следующего.

  1. Результат выполнения этого запроса хранится в базе данных под указанным име­нем (в приведенном выше примере это P2SC) как переменная-отношение, доступ к которой разрешен только для чтения (не считая операции периодического обнов­ления; см. ниже).

  2. Периодически (в нашем примере — каждый день, что устанавливается опцией EVERY DAY) содержание моментального снимка обновляется, т.е. текущие данные аннулируются и запрос выполняется повторно, после чего полученный результат запроса записывается в качестве нового значения моментального снимка.

Таким образом, моментальный снимок P2SC всегда представляет состояние данных, которое они имели не более 24 часов назад (каким в этом случае должен быть предикат данного отношения?).

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

Замечание. Эта идея становится еще привлекательнее в среде распределенных баз дан­ных или приложений поддержки принятия решений (подробности приводятся в главах 20 и 21 соответственно). Отметим также, что моментальные снимки представляют важный ча­стный случай контролируемой избыточности (см. главу 1), а процедура "обновление снимка" — это соответствующий процесс распространения обновления (снова см. главу 1).

В общем случае определение моментального снимка имеет следующий синтаксис.

VAR <имя переменной-отношения> SNAPSHOT реляционное выражениё> <список определений потенциальных ключей> REFRESH EVERY <период> ;

В этом определении для указания периода обновления моментального снимка ис­пользуется параметр <период>, который может принимать, например, следующие значе­ния: MONTH (месяц), WEEK (неделя), H0DR (час), л MINUTES (я минут), MONDAY (понедельник), WEEKDAY (день недели) и т.п. Ниже приведен синтаксис выражения для удаления опреде­ления моментального снимка.

DROP VAR <имя переменной-отношения> ;

Здесь параметр <имя переменной-отношения> задает имя удаляемого моментально­го снимка.

Замечание. Мы подразумеваем, что операция DROP завершится неудачно, если какая-либо переменная-отношение в данный момент ссылается на удаляемый моментальный снимок. Альтернативным решением может быть расширение приведенного выше опре­деления моментального снимка за счет включения опций RESTRICT и CASCADE. Здесь мы не будем обсуждать эту возможность.

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]