Форум: "Базы";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
ВнизРепликация по email или на дискетах Найти похожие ветки
← →
atruhin © (2005-07-10 20:32) [0]Есть филиалы, где происходит сбор данных, есть управление куда данные должны поступать. Т.к. в некоторых филиалах нет постоянного доступа к интернету, необходима возможность проведения репликации с помощью сменных носителей.
Вырисовывается примерно такой алгоритм:
1. Данные вносятся в БД, и одновременно в ЛОГ (Может быть как отдельная таблица, так и внешний файл).
2. Данные переносятся на сервер, где производится репликация, после чего сервер записывает на носитель, код подтверждения репликации записей с номерами от ... до ...
3. Данный код загружается в клиентскую часть после чего данные удаляются данные о реплицированных записях.
Тут и возникают вопросы:
1. Нормальный это способ, или есть что то более изящное.
2. Очень вероятна ситуация что данные на сервер реплицировали, а ответ сервера не донесли, тогда при следующей порции данных нужно отсеивать отработанные данные.
Проект новый на стадии обдумывания, поэтому можно учесть любые советы.
← →
Slym © (2005-07-11 05:17) [1]Поле ModifyDate - при операции изменении записи выставляешь
DataSet["ModifyDate"]:=Now;
При обмене делай
SELECT * FROM TABLE WHERE ModifyDate> :ReplDate;
Т.е. выдать все данные младше опред даты. (даты репликации)
← →
Slym © (2005-07-11 05:34) [2]Обычно хватает Добавить ModifyDate в "главную" таблицу, а с записями из главной таблицы попавшей под репликацию реплицирвать все подчиненные, а на месте уже разбираться надо оно или не надо
← →
Deniz © (2005-07-11 06:17) [3]>в некоторых филиалах нет постоянного доступа к интернету
Нет вообще или все таки иногда есть?
Если иногда бывает, то можно посмотреть в сторону кешированных изменений.
← →
Slym © (2005-07-11 06:29) [4]Подтверждение об обновлении можно сделать так:
После вормирования посылки в спец таблицу пишеш дату репликации и контрольную сумму посылки.
В ответ на посылку сервер отправляет дату репликации и контрольную сумму полученной посылки клиент находит эту запись у себя и отмечает как "Репликация ОК".
Псевдокод:
Client:
File:=CreateRepl(Date);
ReplTable.AppendRecord(Date,Hash(File));
Send(File);
Server
File=GetFile;
AnswerFile=Date(File)+Delimeter+Hash(File);
Send(AnswerFile);
Client
AnswerFile=GetFile;
Find=ReplTable.Locate("Date;Hash",[AnswerFile.Date,AnswerFile.Hash]);
if Find then
ReplTable["Finished"]:=true;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c