Обмен данними (синхронизация бази)

Модератор: Модераторы

kit
постоялец
Сообщения: 156
Зарегистрирован: 29.09.2016 08:39:07

Обмен данними (синхронизация бази)

Сообщение kit »

База в DBF. Как организовать обмен данними между двумя несвязанними компютерами через ел. почту? Типа как в 1С.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

kit писал(а):через ел. почту?

Создаёте дамп файла всей БД (или копируете файл БД) и отправляете его по почте. Программа получатель, должна уметь перемещать этот файл в нужную программе директорию. А дальше она работает с файлом БД, как со своим. Соответственно, если это не полная таблица а её часть, то следует добавить кнопки экспорт(с ограничениями) и импорт.
kit
постоялец
Сообщения: 156
Зарегистрирован: 29.09.2016 08:39:07

Сообщение kit »

Интересует алгоритм синхронизации.
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

Сообщение olegy123 »

Нужен почтовый сервер(Свой/Mail.ru/Yandex.ru/Gmail.com..) и клиент (POP3/IMAP) .
http://www.ararat.cz/synapse/doku.php/p ... pop3sample
http://dev-doc.blogspot.ru/2013/02/delp ... -pop3.html

Данные формируются в DBF файл, во временную папку.
Заполняешь email: куда, почтовое сообщение "Обмен данными"
Тело письма:"Контрольная сумма:123456",
Добовляешь DBF файл.
отправляешь письмо..

Проверяешь почту, новое письмо. Проверяешь на сообщение "Обмен данными". Скачиваешь.
Смотришь на добавленный файл. Записываешь во временную папку.. Проверяешь на контрольную сумму, взятую с тела письма.
Контрольная сумма проверена. Подключаешь DBF-файл. Работаешь с данными.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

kit писал(а):Интересует алгоритм синхронизации.

И ещё было бы интересно узнать, что Вы имеете в виду под термином "синхронизация". ;-) Выявление несовпадающих данных между двумя файлами и делание их совпадающими?
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

Сообщение olegy123 »

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

Ждет ответ, в ответ может прийти типа ок(число передачи/контрольная сумма/хеш) - значит на том конце данные были получены и обработаны...

На самом деле именно так устроены передачи в сети.. но нужно учитывать ограничения размера письма, время обмена - письмо может идти несколько суток.

Добавлено спустя 2 минуты 51 секунду:
Можно использовать передачу через мессенжеры(ICQ,Telegram ..), соцсети. Там где есть публичный API.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Вообще-то база в DBF и обмен через почту это... что наподобие "как правильно изготовить каменный топор"... :lol:
kit
постоялец
Сообщения: 156
Зарегистрирован: 29.09.2016 08:39:07

Сообщение kit »

Vadim писал(а):
kit писал(а):Интересует алгоритм синхронизации.

И ещё было бы интересно узнать, что Вы имеете в виду под термином "синхронизация". ;-) Выявление несовпадающих данных между двумя файлами и делание их совпадающими?

Именно ето меня интересует! Какие дополнительно колонки в таблицу надо добавить?
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

kit писал(а):Какие дополнительно колонки в таблицу надо добавить?

Нужно запоминать дату последней синхронизации, а в таблицу добавить время и дату создания записи. Соответственно, всё что после даты последней синхронизации - должно будет быть синхронизировано. А то что создано, до, даты последней синхронизации - считается уже синхронизированным. Дата синхронизации, у каждой базы своя. Эти даты, на всех машинах, должны быть в едином часовом поясе.

А дальше, отправляете дату последней синхронизации + новые данные и мгновенно до-заполняете недостающие данные в синхронизируемой БД, а она в ответ присылает свои данные, которые были созданы в ней после указанной даты последней синхронизации.

.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

kit писал(а): Какие дополнительно колонки в таблицу надо добавить?

А какие уже есть?
Если проверка актуальности данных будет проводится по новым датам, то обязательно должна присутствовать колонка с датой:временем занесения строки (или, если синхронизация идёт раз в сутки - только дата без времени).
Т.е. сначала вам нужно выявить ту колонку, по которой можно судить, нужна синхронизация или не нужна. Или несколько колонок, если условие синхронизации сложное.

Добавлено спустя 3 минуты 23 секунды:
olegy123 писал(а):но нужно учитывать ограничения размера письма

Скорее всего это не нужно, т.к. файлы DBF (по своему опыту с 1С) величиной более 1 ... 1,5 МБайт - это один сплошной геморой, т.к. постоянно рушатся индексы.
kit
постоялец
Сообщения: 156
Зарегистрирован: 29.09.2016 08:39:07

Сообщение kit »

Что делать если в таблице есть поле ID? Оба клиента добаляют туда записи и ID после синхронизации дублируется.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

kit писал(а):ID после синхронизации дублируется.

Я же написал, с машины №2 направляете новые данные на машину №1 (основной сервер) и записываете недостающие данные. Данным присваиваются новые ID. Потом, все эти данные отправляете обратно, но уже с новыми ID (включая те, данные, которые уже есть на сервере). Соответственно, на машине №2 удаляете все записи с даты последней синхронизации и записываете их же но уже с ID сервера.

Соответственно, теперь: и на сервере и на клиенте, одинаковые синхронизированные данные с одинаковыми ID.

/
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

Сообщение olegy123 »

kit писал(а):Что делать если в таблице есть поле ID? Оба клиента добаляют туда записи и ID после синхронизации дублируется.
если есть возможность добавить поле Timestamp и заносить туда текущую дату обновления записи - то фильтровать просто от даты - самый простой способ
kit
постоялец
Сообщения: 156
Зарегистрирован: 29.09.2016 08:39:07

Сообщение kit »

vitaly_l писал(а):
kit писал(а):ID после синхронизации дублируется.

Я же написал, с машины №2 направляете новые данные на машину №1 (основной сервер) и записываете недостающие данные. Данным присваиваются новые ID. Потом, все эти данные отправляете обратно, но уже с новыми ID (включая те, данные, которые уже есть на сервере). Соответственно, на машине №2 удаляете все записи с даты последней синхронизации и записываете их же но уже с ID сервера.

Соответственно, теперь: и на сервере и на клиенте, одинаковые синхронизированные данные с одинаковыми ID.
/

А если вместо ID добавить UID - составной индекс с ID записи и ID пользователя. Ето спростит или нет?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

kit
А вообще, поле ID что означает? Если это просто номер записи (ну, типа, искусственный уникальный ключ в одной из таблиц), то его копировать в другую таблицу не стоит, т.к. в другой таблице он никакого смысла не имеет.
Ответить