|
|
| Строка 24: |
Строка 24: |
| | | | |
| | Мы будем использовать термин '''база данных''' (БД) в тех случаях, когда для нас не имеет значение является ли указанная база ЦБД или УБД в схеме репликации, имеет ли она статус активной в некотором доменном пространстве P или нет. | | Мы будем использовать термин '''база данных''' (БД) в тех случаях, когда для нас не имеет значение является ли указанная база ЦБД или УБД в схеме репликации, имеет ли она статус активной в некотором доменном пространстве P или нет. |
| − |
| |
| − | = УБД =
| |
| − |
| |
| − | == Состояния объекта в УБД ==
| |
| − |
| |
| − | Каждый объект в УБД находится в определенном состоянии. В таблице ниже перечислены возможные состояния, а также определены допустимые переходы из одного состояния в другое. Состояние объекта влияет на блокировку действий по его изменению или удалению.
| |
| − |
| |
| − | {|border="1" cellpadding="2" cellspacing="0"
| |
| − | |+
| |
| − | !Состояние
| |
| − | !Описание
| |
| − | !Блокировка
| |
| − | !Переход
| |
| − | |-
| |
| − | |I
| |
| − | |Каждый объект, который существовал до настройки схемы репликации (т.е. до создания УБД на основе изначально существовавшей ЦБД), имеет состояние I. В начальный момент времени такой объект присутствует как в УБД, так и в ЦБД.
| |
| − | |Нет
| |
| − | |L
| |
| − | |-
| |
| − | |L
| |
| − | |Изменение объекта занесено в лог. Используется для информирования системы о необходимости отсылки сообщения '''"Передача объекта"''' на ЦБД.
| |
| − | |Объект в состоянии L может быть изменен только в том случае, если после него в логе нет никаких других записей. Последовательные изменения (в смысле порядка записей в логе) одного и того же объекта допускаются.
| |
| − | |S, B
| |
| − | |-
| |
| − | |B
| |
| − | |Используется для остановки процесса передачи данных на ЦБД. При обработке объекта в состоянии B, процесс формирования сообщений останавливается с уведомлением пользователя о том, какая именно запись вызвала остановку.
| |
| − | |Аналогично состоянию L.
| |
| − | |L
| |
| − | |-
| |
| − | |S
| |
| − | |Объект был отослан на ЦБД.
| |
| − | |Аналогично состоянию L.
| |
| − | |C
| |
| − | |-
| |
| − | |C
| |
| − | |Изменение объекта успешно записано в ЦБД.
| |
| − | |Нет
| |
| − | |L
| |
| − | |}
| |
| − |
| |
| − | == Лог изменений УБД ==
| |
| − |
| |
| − | Фиксирование изменений состояния объекта осуществляется в логе на УБД, который заполняется триггерами и содержит:
| |
| − |
| |
| − | * целочисленный порядковый номер изменения (начиная с единицы),
| |
| − | * идентификатор объекта,
| |
| − | * тип объекта,
| |
| − | * вид операции (создание, изменение, удаление),
| |
| − | * состояние объекта,
| |
| − | * дата и время изменения состояния.
| |
| − |
| |
| − | В дальнейшем, символом N мы будем обозначать номер изменения, а символом М -- максимальный номер изменения в логе. М принимается равным нулю, если лог пуст.
| |
| − |
| |
| − | == Состояние базы данных ==
| |
| − |
| |
| − | Мы будем называть целое число S состоянием базы данных. Если S = М, значит все изменения переданы на ЦБД. Если S < M, -- необходимо осуществить передачу. Ситуация, когда S > M означает серьезный сбой в данных репликации, нарушение логической целостности.
| |
| − |
| |
| − | В начальный момент времени:
| |
| − |
| |
| − | S = M = 0
| |
| − |
| |
| − | Базы данных А и B находятся в идентичном состоянии, если M<sub>a</sub> = S<sub>b</sub>.
| |
| − |
| |
| − | Состояние УБД увеличивается на единицу каждый раз, когда подтверждается передача очередного объекта. S<sub>a</sub> равно максимальному номеру записи в логе в состоянии C.
| |
| − |
| |
| − | Состояние ЦБД увеличивается на единицу каждый раз, когда успешно принимается и записывается в базу очередной объект. S<sub>b</sub> равно максимальному номеру записи в логе в состоянии R.
| |
| − |
| |
| − | В начальный момент времени базы данных находятся в идентичном состоянии и выполняется равенство:
| |
| − |
| |
| − | S<sub>a</sub> = S<sub>b</sub> = М<sub>a</sub> = М<sub>b</sub> = 0
| |
| − |
| |
| − | == Связь в асинхронном режиме ==
| |
| − |
| |
| − | В том случае, если при обмене данными между УБД и ЦБД нет постоянного канала связи, мы будем использовать следующие параметры:
| |
| − | T<sub>r</sub> -- Допустимое время ожидания ответа на посланное сообщение.
| |
| − | T<sub>s</sub> -- Время простоя ЦБД с момента обработки последнего сообщения до отсылки запроса о состоянии УБД.
| |
| − | T<sub>i</sub> -- Период с которым УБД осуществляет проверку очереди сообщений и отсылку изменений на ЦБД.
| |
| − |
| |
| − | == Критерий идентичности УБД и ЦБД в асинхронном режиме ==
| |
| − |
| |
| − | УБД знает о том, что она идентична ЦБД, если S<sub>a</sub>=M<sub>a</sub>. Т.е. нет объектов в состоянии L, B или S.
| |
| − |
| |
| − | ЦБД знает о том, что она идентичная УБД, если получено сообщение '''"Состояние УБД"''' (ответ на сообщение '''"Запрос состояния УБД"''') из которого следует что M<sub>a</sub>=S<sub>b</sub>.
| |
| − |
| |
| − | = ЦБД =
| |
| − |
| |
| − | == Список баз данных в схеме репликации ==
| |
| − |
| |
| − | ЦБД хранит список всех УБД в отдельной таблице. В списке фиксируется:
| |
| − |
| |
| − | * ИД базы данных.<ref>Не [[DBID]], который меняется при бэкапе/разбэкапе с соответствующим ключем.</ref>
| |
| − | * Наименование базы данных.
| |
| − |
| |
| − | == Состояния объекта в ЦБД ==
| |
| − |
| |
| − |
| |
| − | {|border="1" cellpadding="2" cellspacing="0"
| |
| − | |+
| |
| − | !Состояние
| |
| − | !Описание
| |
| − | !Блокировка
| |
| − | !Переход
| |
| − | |-
| |
| − | |I
| |
| − | |Каждый объект, который существовал до настройки схемы репликации (т.е. до создания УБД на основе изначально существовавшей ЦБД), имеет состояние I. В начальный момент времени такой объект присутствует как в УБД, так и в ЦБД.
| |
| − | |Нет
| |
| − | |L
| |
| − | |-
| |
| − | |R
| |
| − | |Объект получен и записан в базу данных.
| |
| − | |
| |
| − | |
| |
| − | |-
| |
| − | |L
| |
| − | |Изменение объекта занесено в лог. Используется для информирования системы о необходимости отсылки сообщения '''"Передача объекта"''' на ЦБД.
| |
| − | |Объект в состоянии L может быть изменен только в том случае, если после него в логе нет никаких других записей. Последовательные изменения (в смысле порядка записей в логе) одного и того же объекта допускаются.
| |
| − | |S, B
| |
| − | |-
| |
| − | |B
| |
| − | |Используется для остановки процесса передачи данных на ЦБД. При обработке объекта в состоянии B, процесс формирования сообщений останавливается с уведомлением пользователя о том, какая именно запись вызвала остановку.
| |
| − | |Аналогично состоянию L.
| |
| − | |L
| |
| − | |-
| |
| − | |S
| |
| − | |Объект был отослан на ЦБД.
| |
| − | |Аналогично состоянию L.
| |
| − | |C
| |
| − | |-
| |
| − | |C
| |
| − | |Изменение объекта успешно записано в ЦБД.
| |
| − | |Нет
| |
| − | |L
| |
| − | |}
| |
| − |
| |
| − | == Передача статуса активной базы данных ==
| |
| | | | |
| | = Примечания = | | = Примечания = |
Версия 18:30, 5 сентября 2009
Мы будем рассматривать вариант мультинаправленной асинхронной дельта репликации в топографии "звезда".
Как видно на представленном рисунке, несколько Удаленных баз данных (УБД) обмениваются данными с одной Центральной базой данных (ЦБД). Изменение данных может осуществляться как на УБД, так и на ЦБД. Передача изменений напрямую от одной УБД к другой, минуя ЦБД, невозможна.
Совокупность всех УБД и ЦБД, включенных в схему репликации, называется Распределенной базой данных (РБД).
Циркуляция изменений в рамках распределенной базы данных происходит внутри т.н. доменов. Домен может состоять только из ЦБД, или ЦБД и одной или нескольких УБД. Каждый объект может принадлежать одному или нескольким доменам одновременно. В РБД одновременно может существовать неограниченное количество доменов.
На рисунке ниже показана РБД с двумя доменами. Согласно представленной схеме, если некоторый объект принадлежит только "Домену 1", то его изменения, сделанные на УБД1, будут переданы (реплицированы) на ЦБД и УБД3, но не попадут на УБД2, так как она не входит в "Домен 1". Аналогично, изменения объекта из "Домена 2" будут передаваться только между УБД2 и ЦБД.
Принадлежность объекта домену может устанавливаться только на основании его класса (вертикальное разбиение) или класса и принадлежности некоторому множеству (горизонтальное разбиение). Пример вертикального разбиения -- все объекты класса "Компания". Пример горизонтального -- все объекты класса "Компания", входящие в папку "Общие клиенты" справочника контактов.
Объекты, не принадлежащие ни одному из доменов, реплицируются по всей РБД. Т.е. можно говорить что такие объекты принадлежит некоему глобальному домену, который существует изначально и покрывает всю РБД.
Мы будем называть доменным пространством P объекта О объединение всех доменов, которым принадлежит указанный объект.
В рамках доменного пространства, в один момент времени, редактирование или удаление объекта возможно только на одной базе данных. Такая база данных называется активной базой данных доменного пространства P (АБД). Активная база данных в начальный момент времени называется главной базой данных доменного пространства P (ГБД). Статус активной базы передается от ГБД к другой базе данных из Р на ограниченный промежуток времени Ta.
Создание новых объектов воможно на любой базе данных вне зависимости от статуса активности.
Мы будем использовать термин база данных (БД) в тех случаях, когда для нас не имеет значение является ли указанная база ЦБД или УБД в схеме репликации, имеет ли она статус активной в некотором доменном пространстве P или нет.
Примечания