Обмен данними (синхронизация бази)
Модератор: Модераторы
Обмен данними (синхронизация бази)
База в DBF. Как организовать обмен данними между двумя несвязанними компютерами через ел. почту? Типа как в 1С.
kit писал(а):через ел. почту?
Создаёте дамп файла всей БД (или копируете файл БД) и отправляете его по почте. Программа получатель, должна уметь перемещать этот файл в нужную программе директорию. А дальше она работает с файлом БД, как со своим. Соответственно, если это не полная таблица а её часть, то следует добавить кнопки экспорт(с ограничениями) и импорт.
Интересует алгоритм синхронизации.
Нужен почтовый сервер(Свой/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-файл. Работаешь с данными.
http://www.ararat.cz/synapse/doku.php/p ... pop3sample
http://dev-doc.blogspot.ru/2013/02/delp ... -pop3.html
Данные формируются в DBF файл, во временную папку.
Заполняешь email: куда, почтовое сообщение "Обмен данными"
Тело письма:"Контрольная сумма:123456",
Добовляешь DBF файл.
отправляешь письмо..
Проверяешь почту, новое письмо. Проверяешь на сообщение "Обмен данными". Скачиваешь.
Смотришь на добавленный файл. Записываешь во временную папку.. Проверяешь на контрольную сумму, взятую с тела письма.
Контрольная сумма проверена. Подключаешь DBF-файл. Работаешь с данными.
kit писал(а):Интересует алгоритм синхронизации.
И ещё было бы интересно узнать, что Вы имеете в виду под термином "синхронизация".
Вводится временный данные, таблица где был экспорт, допустим (время, ключ). При экспорте заносится данные что были по последнему времени изменены .. Для надежности можно записать число передачи, контрольную сумму или хеш файла.
Это отсылается,..
Ждет ответ, в ответ может прийти типа ок(число передачи/контрольная сумма/хеш) - значит на том конце данные были получены и обработаны...
На самом деле именно так устроены передачи в сети.. но нужно учитывать ограничения размера письма, время обмена - письмо может идти несколько суток.
Добавлено спустя 2 минуты 51 секунду:
Можно использовать передачу через мессенжеры(ICQ,Telegram ..), соцсети. Там где есть публичный API.
Это отсылается,..
Ждет ответ, в ответ может прийти типа ок(число передачи/контрольная сумма/хеш) - значит на том конце данные были получены и обработаны...
На самом деле именно так устроены передачи в сети.. но нужно учитывать ограничения размера письма, время обмена - письмо может идти несколько суток.
Добавлено спустя 2 минуты 51 секунду:
Можно использовать передачу через мессенжеры(ICQ,Telegram ..), соцсети. Там где есть публичный API.
- Снег Север
- долгожитель
- Сообщения: 3071
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Вообще-то база в DBF и обмен через почту это... что наподобие "как правильно изготовить каменный топор"... 
Vadim писал(а):kit писал(а):Интересует алгоритм синхронизации.
И ещё было бы интересно узнать, что Вы имеете в виду под термином "синхронизация".Выявление несовпадающих данных между двумя файлами и делание их совпадающими?
Именно ето меня интересует! Какие дополнительно колонки в таблицу надо добавить?
kit писал(а):Какие дополнительно колонки в таблицу надо добавить?
Нужно запоминать дату последней синхронизации, а в таблицу добавить время и дату создания записи. Соответственно, всё что после даты последней синхронизации - должно будет быть синхронизировано. А то что создано, до, даты последней синхронизации - считается уже синхронизированным. Дата синхронизации, у каждой базы своя. Эти даты, на всех машинах, должны быть в едином часовом поясе.
А дальше, отправляете дату последней синхронизации + новые данные и мгновенно до-заполняете недостающие данные в синхронизируемой БД, а она в ответ присылает свои данные, которые были созданы в ней после указанной даты последней синхронизации.
.
kit писал(а): Какие дополнительно колонки в таблицу надо добавить?
А какие уже есть?
Если проверка актуальности данных будет проводится по новым датам, то обязательно должна присутствовать колонка с датой:временем занесения строки (или, если синхронизация идёт раз в сутки - только дата без времени).
Т.е. сначала вам нужно выявить ту колонку, по которой можно судить, нужна синхронизация или не нужна. Или несколько колонок, если условие синхронизации сложное.
Добавлено спустя 3 минуты 23 секунды:
olegy123 писал(а):но нужно учитывать ограничения размера письма
Скорее всего это не нужно, т.к. файлы DBF (по своему опыту с 1С) величиной более 1 ... 1,5 МБайт - это один сплошной геморой, т.к. постоянно рушатся индексы.
Что делать если в таблице есть поле ID? Оба клиента добаляют туда записи и ID после синхронизации дублируется.
kit писал(а):ID после синхронизации дублируется.
Я же написал, с машины №2 направляете новые данные на машину №1 (основной сервер) и записываете недостающие данные. Данным присваиваются новые ID. Потом, все эти данные отправляете обратно, но уже с новыми ID (включая те, данные, которые уже есть на сервере). Соответственно, на машине №2 удаляете все записи с даты последней синхронизации и записываете их же но уже с ID сервера.
Соответственно, теперь: и на сервере и на клиенте, одинаковые синхронизированные данные с одинаковыми ID.
/
если есть возможность добавить поле Timestamp и заносить туда текущую дату обновления записи - то фильтровать просто от даты - самый простой способkit писал(а):Что делать если в таблице есть поле ID? Оба клиента добаляют туда записи и ID после синхронизации дублируется.
vitaly_l писал(а):kit писал(а):ID после синхронизации дублируется.
Я же написал, с машины №2 направляете новые данные на машину №1 (основной сервер) и записываете недостающие данные. Данным присваиваются новые ID. Потом, все эти данные отправляете обратно, но уже с новыми ID (включая те, данные, которые уже есть на сервере). Соответственно, на машине №2 удаляете все записи с даты последней синхронизации и записываете их же но уже с ID сервера.
Соответственно, теперь: и на сервере и на клиенте, одинаковые синхронизированные данные с одинаковыми ID.
/
А если вместо ID добавить UID - составной индекс с ID записи и ID пользователя. Ето спростит или нет?
kit
А вообще, поле ID что означает? Если это просто номер записи (ну, типа, искусственный уникальный ключ в одной из таблиц), то его копировать в другую таблицу не стоит, т.к. в другой таблице он никакого смысла не имеет.
А вообще, поле ID что означает? Если это просто номер записи (ну, типа, искусственный уникальный ключ в одной из таблиц), то его копировать в другую таблицу не стоит, т.к. в другой таблице он никакого смысла не имеет.
