Мультинаправленная репликация в схеме "звезда" (постановка)
Материал из GedeminWiki
- Репликация на уровне таблиц реляционной базы данных.
- В репликации участвует одна главная база данных (master) и неограниченное количество удаленных баз данных (remote).
- Обмен между удаленными базами данных происходит через главную (топология "звезда").
- На каждой базе данных может быть свой набор таблиц, участвующих в репликации. При условии, что при переносе изменений будет сохраняться целостность данных.
- Структура таблиц, участвующих в репликации, может отличаться на разных базах. При условии, что при переносе изменений будет сохраняться целостность данных.
- Каждая база данных имеет свой уникальный идентификатор -- DBID.
- Для каждой таблицы T, участвующей в репликации, создается таблица T' для хранения версий записей.
- Таблица T' содержит все поля из таблицы T. Но, ограничения и индексы не создаются.
- В таблице T' создается поле-первичный ключ modid -- идентификатор модификации. modid -- целое число, увеличивающееся от более ранних изменений к более поздним. modid является первичным ключем и одновременно внешним ключем на таблицу лога. При логировании операции удаления в таблице модификаций заполняются только поля modid и идентификатор записи.
- Изменения, сделанные в рамках одной транзакции, переносятся на удаленную базу данных как единое целое (при репликации сохраняется атомарность изменений).
- При перемещении за пределы базы данных записи идентифицируются глобальным РУИДом, уникальным для всех БД, участвующих в репликации.
- Все изменения фиксируются в таблице лога с помощью триггеров AFTER на таблицах, участвующих в схеме репликации.
CREATE TABLE gd_repl_log ( id dintkey, -- сюда направлена ссылка из таблицы с модификациями ts dtimestamp_notnull, relname drelationname, op CHAR(1) NOT NULL, -- I, U, D trid dintkey, -- идентификатор транзакции dbid dintkey, -- идентификатор базы данных, где были произведены изменения CONSTRAINT gd_pk_repl_log PRIMARY KEY (id) );