15 авг. 2009 г.

Параллельными курсами

В статье про организацию репликации читаем:
Для унификации желательно, чтобы в каждой таблице, включенной в процесс синхронизации был суррогатный первичный ключ (ID) - обычно INTEGER. Впрочем, чаще всего так и есть. Как же мы можем обеспечить уникальную идентификацию записей.
...
Можно сделать первичным ключем строку спецального формата, например XXXX-YYYY-ZZZZZZZZ, где XXXX - это идентификатор базы данных, где запись была создана впервые, YYYY - идентификатор таблицы, ZZZZZZZZ - идентификатор записи внутри конкретной таблицы конкретной БД.
Практически наш RUID, только что нам нет смысла хранить ID таблицы, так как идентификатор записи уникален в пределах одной базы данных. Наше отличие — для хранения RUID используется отдельная таблица. Была идея хранить RUID непосредственно в каждой таблице, но от нее отказались по соображениям экономии места. Не каждая запись нуждается в получении загранпаспорта.

Там же:
На мой взгляд, для InterBase лучшим вариантом является следующий - ID для всех таблиц генерируется обычным триггером, выбирающим значения из генератора. При этом начальное значение генератора различно для разных БД, за счет чего обеспечится уникальность ID по всем БД. Данный подход характерен для InterBase. Применение его для других СУБД может быть ограничено невозможностью задать начальное значение для счетчика автоинкрементных полей.
Аналогичная идея была в Гедымине. Для смещения идентификаторов в каждой базе планировалось применять свое значение генератора gd_g_offset. Типичный код триггера на присвоение идентификатора записи:

CREATE TRIGGER gd_bi_command FOR gd_command
  BEFORE INSERT
  POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
  NEW.ID = GEN_ID(gd_g_unique, 1) + GEN_ID(gd_g_offset, 0);
END

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

PS: Перенос прикладных настроек — это по сути односторонняя репликация в урезанном виде.

PPS: Подборка материалов по репликации (синхронизации) БД.

Комментариев нет:

Отправить комментарий