Синхронизация:Механизм двусторонней синхронизации — различия между версиями
Материал из wiki.standart-n.ru
Vlasova (обсуждение | вклад) (Новая страница: «==СТРУКТУРА G$DISTRIBUTE== Данная таблица заполняется 1) триггерами, каждая запись соответств…») |
Olgav (обсуждение | вклад) (→СТРУКТУРА G$DISTRIBUTE) |
||
(не показано 5 промежуточных версии ещё одного участника) | |||
Строка 1: | Строка 1: | ||
+ | ==Используемые сокращения== | ||
+ | ГБ - Глобальная база | ||
+ | КБ - Клиентская база | ||
+ | |||
==СТРУКТУРА G$DISTRIBUTE== | ==СТРУКТУРА G$DISTRIBUTE== | ||
Данная таблица заполняется | Данная таблица заполняется | ||
Строка 12: | Строка 16: | ||
SERVERPACKET – Показатель изменения записи на ГБ. (Инкрементируется на ГБ) | SERVERPACKET – Показатель изменения записи на ГБ. (Инкрементируется на ГБ) | ||
INSERTDT – Дата вставки записи. | INSERTDT – Дата вставки записи. | ||
− | RELATIONTYPE - Для частично реплицируемых таблиц. 0 - полная репликация 1 – частичная. Устанавливается триггером или процедурой, для конкретной сети. | + | RELATIONTYPE - Для частично реплицируемых таблиц. 0 - полная репликация 1 – частичная. Устанавливается триггером или процедурой или скриптом getrelationtype.php, для конкретной сети. |
− | + | ==КБ --> ГБ== | |
− | 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. В текстовый файл для каждой выбранной записи в предыдущем запросе записываются данные: вид операции, имя таблицы, уникальный идентификатор, значения и имена всех полей таблицы. | ||
Если установлено ограничение максимального размера пакета для двухсторонней синхронизации, то данные могут уйти не все за один раз. | Если установлено ограничение максимального размера пакета для двухсторонней синхронизации, то данные могут уйти не все за один раз. | ||
4. Данный пакет отправляется на сервер, где ставится в очередь загрузки или загружается в ГБ. | 4. Данный пакет отправляется на сервер, где ставится в очередь загрузки или загружается в ГБ. | ||
− | + | ==ГБ --> КБ== | |
− | 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. Данный пакет принимается и загружается в КБ. |
Текущая версия на 13:17, 2 октября 2018
Используемые сокращения
ГБ - Глобальная база КБ - Клиентская база
СТРУКТУРА 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 – частичная. Устанавливается триггером или процедурой или скриптом getrelationtype.php, для конкретной сети.
КБ --> ГБ
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. Данный пакет принимается и загружается в КБ.