×

Программный модуль синхронизации баз данных

 
Программный модуль представляет собой TCP-сервер на базе компонента TIdTCPServer(Indy), который размещается на машине с подчинённой(slave) базой данных PostgreSQL. Основная база данных (master) может быть любого типа (MSSQL, PostgreSQL, FireBird, MySQL) и располагаться как на локальной, так и на удалённой машине. Все изменения основной базы передаются TCP-серверу подчинённой базы в виде зашифрованных SQL-запросов типа Select, Update, Delete, Insert, Create Table, Drop Table, Alter Table. Соответственно, на машине с эталонной базой должно быть установлено клиентское приложение, которое при возникновении изменений в базе данных формирует соответствующие SQL-запросы. После шифрации эти запросы пересылаются адресату по протоколу TCP/IP. После выполнения SQL-запроса на подчинённой машине, клиентское приложение получает подтверждение о корректном выполнении оператора (или ошибке), либо набор данных, в случае использования оператора Select.
Программа функционирует в двух режимах. Первый (режим 1) соответствует работе с SQL-запросами в том виде, в каком они поступают от клиентского приложения. Второй (режим 2) предполагает выполнение ряда дополнительных операций для операторов типа Update, Insert. Прежде чем выполнить оператор Update проверяется наличие соответствующей записи в модифицируемой таблице. Если записи нет, то с помощью дополнительного оператора Insert запись создаётся и уже для неё выполняется оператор Update. Есть одно ограничение. Предложение Where в операторе Update должно включать только одно условие, и оно должно относиться к ключевому полю. В общем виде для оператора Update имеем:
 
UPDATE имя_таблицы
SET столбец1 = значение1, столбец2 = значение2, ... столбецN = значениеN
 [WHERE условие_обновления] .
В нашем случае «условие_обновления» должно касаться ключевого поля и иметь вид: столбец=значение. Тогда, при отсутствии записи в таблице будет дополнительно выполнен оператор:
 Insert имя_таблицы (столбец) values (значение).
 
Смысл этой операции в том, что нет необходимости посылать команду insert по каналам TCP/IP.
Что касается оператора Insert, то прежде чем выполнить эту команду также осуществляется проверка наличия записи в таблице. Если запись есть, то выполнение полученного оператора Insert блокируется. В противном случае команда выполняется.
 Существуют две версии программы. Первая функционируем под управлением ОС Windows, вторая под управлением ОС Astra Linux. Легко перенастроить программу на работу с базами типа MSSQL, FireBird, MySQL.