Синхронизация:Механизм двусторонней синхронизации — различия между версиями

Материал из wiki.standart-n.ru
Перейти к: навигация, поиск
Строка 19: Строка 19:
  
 
==КБ --> ГБ==
 
==КБ --> ГБ==
  1. Находим максимальный загруженный packet в ГБ данного профиля. Select max(packet) from g$distribute where from_profile_id=:profile_id.
+
  1. Находим максимальный загруженный '''packet''' в '''ГБ''' данного профиля. Select max(packet) from g$distribute where from_profile_id=:profile_id.
 
  2. Подготавливаем пакет для сервера от максимально загруженного на сервер до последнего, что есть в G$DISTRIBUTE.  
 
  2. Подготавливаем пакет для сервера от максимально загруженного на сервер до последнего, что есть в G$DISTRIBUTE.  
     select d.uuid, trim(d.tablename) as tablename, d.packet, d.soper from G$DISTRIBUTE d where (d.FROM_PROFILE_ID is null) and d.packet>:max_packet order by d.packet  
+
     ''select d.uuid, trim(d.tablename) as tablename, d.packet, d.soper from G$DISTRIBUTE d where (d.FROM_PROFILE_ID is null) and d.packet>:max_packet order by d.packet''
 
  3. В текстовый файл для каждой выбранной записи в предыдущем запросе записываются данные: вид операции, имя таблицы, уникальный идентификатор, значения и имена всех полей таблицы.  
 
  3. В текстовый файл для каждой выбранной записи в предыдущем запросе записываются данные: вид операции, имя таблицы, уникальный идентификатор, значения и имена всех полей таблицы.  
 
     Если установлено ограничение максимального размера пакета для двухсторонней синхронизации, то данные могут уйти не все за один раз.
 
     Если установлено ограничение максимального размера пакета для двухсторонней синхронизации, то данные могут уйти не все за один раз.
Строка 27: Строка 27:
  
 
==ГБ --> КБ==
 
==ГБ --> КБ==
  1. Находим максимальный загруженный serverpacket в КБ в G$DISTRIBUTE. Select max(serverpacket) from g$distribute where from_profile_id is not null.
+
  1. Находим максимальный загруженный '''serverpacket''' в '''КБ'''' в G$DISTRIBUTE. Select max(serverpacket) from g$distribute where from_profile_id is not null.
 
  2. Дается команда скриптам на сервере, собрать пакет для текущего профиля. От максимально загруженного serverpacket до последнего serverpacket, что есть в G$DISTRIBUTE в ГБ.  
 
  2. Дается команда скриптам на сервере, собрать пакет для текущего профиля. От максимально загруженного serverpacket до последнего serverpacket, что есть в G$DISTRIBUTE в ГБ.  
     select d.uuid, trim(d.tablename) as tablename,    iif(d.packet is null, 0, d.packet), d.soper, SERVERPACKET, FROM_PROFILE_ID from G$DISTRIBUTE d where (serverpacket>:max_server_packet) order by d.serverpacket
+
     ''select d.uuid, trim(d.tablename) as tablename,    iif(d.packet is null, 0, d.packet), d.soper, SERVERPACKET, FROM_PROFILE_ID from G$DISTRIBUTE d where (serverpacket>:max_server_packet) order by d.serverpacket''
 
  3. В текстовый файл для каждой выбранной записи в предыдущем запросе записываются данные: вид операции, имя таблицы, уникальный идентификатор, значения и имена всех полей таблицы.
 
  3. В текстовый файл для каждой выбранной записи в предыдущем запросе записываются данные: вид операции, имя таблицы, уникальный идентификатор, значения и имена всех полей таблицы.
 
  4. Данный пакет принимается и загружается в КБ.
 
  4. Данный пакет принимается и загружается в КБ.

Версия 11:22, 6 апреля 2015

Используемые сокращения

ГБ - Глобальная база
КБ - Клиентская база

СТРУКТУРА G$DISTRIBUTE

Данная таблица заполняется 
1) триггерами, каждая запись соответствует определенной операцией с синхронизируемой таблицей – для отправки 
2) Входящими данными синхронизации – для приема данных.  
ID – Ключ таблицы
TABLENAME – Имя таблицы
UUID – Уникальный строковый идентификатор таблицы TABLENAME
PACKET – Показатель изменения записи на КБ. (Инкрементируется в текущей КБ)
SOPER – Вид операции с таблицей TABLENAME. 0 – INSERT, 1 – UPDATE, 2 - DELETE
FROM_PROFILE_ID – 1) NULL: данная запись появилась в текущей КБ 2) 0:данная запись появилась на ГБ 3) Код профиля: код профиля с которого пришла запись
TO_PROFILE_ID – пока не используется
SERVERPACKET – Показатель изменения записи на ГБ. (Инкрементируется на ГБ)
INSERTDT – Дата вставки записи.
RELATIONTYPE - Для частично реплицируемых таблиц. 0 - полная репликация 1 – частичная. Устанавливается триггером или процедурой, для конкретной сети.

КБ --> ГБ

1. Находим максимальный загруженный packet в ГБ данного профиля. Select max(packet) from g$distribute where from_profile_id=:profile_id.
2. Подготавливаем пакет для сервера от максимально загруженного на сервер до последнего, что есть в G$DISTRIBUTE. 
   select d.uuid, trim(d.tablename) as tablename, d.packet, d.soper from G$DISTRIBUTE d where (d.FROM_PROFILE_ID is null) and d.packet>:max_packet order by d.packet 
3. В текстовый файл для каждой выбранной записи в предыдущем запросе записываются данные: вид операции, имя таблицы, уникальный идентификатор, значения и имена всех полей таблицы. 
   Если установлено ограничение максимального размера пакета для двухсторонней синхронизации, то данные могут уйти не все за один раз.
4. Данный пакет отправляется на сервер, где ставится в очередь загрузки или загружается в ГБ.

ГБ --> КБ

1. Находим максимальный загруженный serverpacket в КБ' в G$DISTRIBUTE. Select max(serverpacket) from g$distribute where from_profile_id is not null.
2. Дается команда скриптам на сервере, собрать пакет для текущего профиля. От максимально загруженного serverpacket до последнего serverpacket, что есть в G$DISTRIBUTE в ГБ. 
   select d.uuid, trim(d.tablename) as tablename,    iif(d.packet is null, 0, d.packet), d.soper, SERVERPACKET, FROM_PROFILE_ID from G$DISTRIBUTE d where (serverpacket>:max_server_packet) order by d.serverpacket
3. В текстовый файл для каждой выбранной записи в предыдущем запросе записываются данные: вид операции, имя таблицы, уникальный идентификатор, значения и имена всех полей таблицы.
4. Данный пакет принимается и загружается в КБ.