Главная » SQL, Базы данных » СНИМКИ (НЕБОЛЬШОЕ ОТКЛОНЕНИЕ ОТ ОСНОВНОЙ ТЕМЫ)

0

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

VAR P2SC SNAPSHOT

( ( S JOIN SP ) WHERE P# = P# (‘P2′) ) { S#, CITY } REFRESH EVERY DAY ;

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

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

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

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

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

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

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

VAR <relvar name> SNAPSHOT <relation exp> <candidate key def list> REFRESH EVERY <now and then> ;

В этом определении для указания периода обновления снимка используется параметр

<now and then>, который может принимать, например, следующие значения:  MONTH (Месяц), WEEK (Неделя), HOUR (Час), п MINUTES (n минут), MONDAY  (Понедельник), WEEKDAY (День недели) и т.п. Следует особо отметить, что для поддержки постоянной

синхронизации снимка с одной или несколькими переменными отношения, на основании которых он был создан, может использоваться спецификация в форме REFRESH

[ON]    EVERY  UPDATE.

Ниже приведен синтаксис оператора DROP, применяемого для удаления определения снимка.

DROP VAR  <relvar name>   ;

Здесь параметр <relvar name> задает имя удаляемого снимка.

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

Примечание, касающееся терминологии. Ко времени подготовки первого издания данной книги снимки были известны не под их современным названием, а  именовались (фактически почти исключительно) материализованными представлениями6  (см. раздел "Список литературы" в главе 22). Однако этот термин является крайне неудачным, и, по

6  Некоторые авторы (но не все) применяют термин "материализованное представление"  исключительно для обозначения снимков, в отношении которых можно гарантировать, что они всегда будут оставаться актуальными (т.е. для создания которых применяется оператор REFRESH ON EVERY UPDATE).

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

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии