powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Синхронизация баз, варианты решения?
25 сообщений из 25, страница 1 из 1
Синхронизация баз, варианты решения?
    #32525116
Demosphen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, подскажите вариант решения. Есть два офиса, в каждом одна и таже база, необходимо настроить синхронизацию данных. Общий размер базы 500МБ? Ежедневно добавляется данные от 1 до 5 мегабайт, желательно чтобы добавленные (изменённые) данные автоматически паковались ночью и при установке соединения пересылались между офисами?
Основной вопрос, как и в каком формате, выгружать данные, чтобы это было быстро и занимало как можно меньше места по объему.
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32525122
Demosphen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл добавить, всё это работает на FireBird 1.5
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32525280
Ну, я для этих целей писал свой репликатор (у меня стояла задача - синхронизация нескольких баз).
Сделал для него несколько настроечных таблиц, сделал логирование всех изменений в рабочих таблицах БД.
Работает уже пол-года. Поначалу, конечно, было много граблей, но сейчас все устаканилось.
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32525342
Demosphen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest шедший мимо Проблема не в отслеживании того что изменилось или добавилось.
В какой формат ты выгружал данные, с помошью чего, что более оптимально использовать?
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32525480
goshanew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выгружай прямо в SQL script. Т.е. каждое изменение прямо так как оно должно происходить потом в обновляемой базе (INSERT, UPDATE, DELETE), а потом пакуй каким нибыдь архиватором. Вся прелесть в том что на обновляемой базе потом тебе просто надо будет этот скрипт выполнить и все. Единственная мелочь - это порядок следования обновлений, если у тебя есть ссылочная целостность.
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32525509
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Demosphen
Основной вопрос, как и в каком формате, выгружать данные
Что-то мне говорит, что это далеко не основной вопрос. Какая разница - какой формат? Хоть графический. 8-) Если ты знаешь что передавать и как это накатить не нарушая целостности - то экономия 100 килбайт и 3 минут для ночного задания - фигня. Самое интересное в этом вопросе обычно справочники, пополняемые в обоих экземплярах.
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32525792
Demosphen
Я с форматами не парился.
Программка-репликатор коннектится к обеим базам, определяет по логам, что и как менялось, а потом генерит и исполняет соответствующие SQL-операторы.
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32526380
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Guest шедший мимо

Любопытно. А что со справочниками? Как обрабатывал задваивание позиций?

а потом генерит и исполняет соответствующие SQL-операторы.

вот про это можно поподробнее?
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32526541
Dik76
Может, весь код в студию предоставить (кстати, разработка была вполне коммерческая)? :))
С задваиванием бороться незачем - на то есть первичные ключи. Уникальность достигается путем задания шага генераторов для каждой базы. В общем, там было использовано довольно много фич такого рода.
Вообще говоря, несмотря на неплохо, на первый взгляд, проработанную идею, пришлось наступить на ряд грабель, пока все стало работать как часики :)
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32526570
vis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest шедший мимоС задваиванием бороться незачем - на то есть первичные ключи. Уникальность достигается путем задания шага генераторов для каждой базы. В общем, там было использовано довольно много фич такого рода.

т.е. ООО "Пупкин" в одной базе и ООО "Пупкин" во второй - это две большие разницы?
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32526602
vis
В моем случае записи в справочники добавляются только в основной базе - в остальных они могут только корректироваться.
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32526649
vis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хороший у Вас случай :))
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32526668
vis
Ну, случай как случай, вполне стандартный.
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32527605
Demosphen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goshanew Мне что-то ручками (программно) генерить скрипт не хочется, а чем бы можно было выгрузить в скрипт я не знаю.

Серега С целостностью проблем нет, со справочниками то же они заполняються в одном месте, а потом передаются. Вопрос именно стоит в оптимизации выгркузки и в размере, т.к. если всё будет нормально то планируется делать такую синхронизацию намного чаще. И тогда размер передоваемых данных и скорость выгрузки становятся ой как важны.

Guest шедший мимо Тебе проще было, у тебя был возможен конект сразу к двум базам, у меня такой возможности нет, поэтому и важно в чё выгружать. Если сможешь дать ссылку где можно взять пример кода который генерит скрипты буду очень благодарен.
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32527698
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Demosphen
Мне что-то ручками (программно) генерить скрипт не хочется
Это сильный аргумент. 8-)

С целостностью проблем нет, со справочниками то же они заполняються в одном месте, а потом передаются.
Ну это уже попроще. Но мне все таки кажется что ты знаешь что надо выгружать. Если знаешь, то автоматизировать это достаточно легко. Например пиши тригерами в отдельную таблицу прямо текст модифицирующего запроса в строковое поле. Чем не способ? Выгружай таблу в текстовый файл, пакуй и вперед с песней. Только не забудь еще реакцию на (не)применение твоего скрипта. Типа флаг - применено/нет на другой машине, а то мало ли, скрипт отослал, а там облом какой нить. Так что надо возвращать протокол применения.
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32527786
doroshka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я в своей системе данные для обновления выгружаю в такой формат

Код: plaintext
1.
FIELD_1#FIELD_2#FIELD_3#FIELD_4#...#FIELD_N

В моем случае в лог пишется только ключ измененной записи, какие именно поля были изменены я не рассматриваю и при синхронизации делаю по ключу выборку всей записи и передаю всю запись целиком.

Затем все это пакуется и передается на другой комп, там распаковывается, происходит разбор строки и формируется SQL вида:

execute procedure table_iu(FIELD1,FIELD2,...,FIELD_N);

Эти процедуры легко создаются мастером в IBExpert-е и позволяют вставить запись если ее нет и обновить если она была.

Мне кажется формат передачи не так важен. Если пользуешься архиватором, то передаешь ты скрипт или поля с разделителем, разница на одинаковых объемах данных - будет весьма незначительной. А генерить скрипт все равно прийдется. Толи до передачи, толи после...

ЗЫ. Видел систему в которой данные выгружались в dbf-ку структура кторой ижетична структуре синхронизируемой таблицы + поле в котором указано что с этой записью делать. И такой есть "транспорт" для данных...
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32527814
Demosphen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серега Угу, сильный, если есть примеры кода дай, а то я сам ух как долго буду писать и отлаживать.

Да ты прав, что я знаю, что мне надо выгружать, но количество таблиц при передаче может меняться, некоторые могут удаляться, некоторые создаваться. По моим прикидка их количество может достигать сотни. Как ты думаешь очень интересно на каждую таблицу держать дополнительно ещё одну, и как мне потом выгрузить только определенные из них в один файл. А с сотней файлов возиться это уже слишком. Поэтому вопрос и был, какими средствами это можно сделать.
Может быть поможет такая формулировка, как выгрузить из базы определённые записи из определённых таблиц (записи и таблицы уже известны) в один файл, формат любой, есть средства для этого. ограничение только стоит на скорость выгрузки и размер файла который получается. Есть ли для этого уже готовые решения, или может кто сталкивался с подобной ситуацией.
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32527856
Demosphen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doroshka Я знаю какие записи добавились или изменились, меня интересует именно момент - взять записи, выгрузить кудато (этот файл не важно какого формата), потом из файла и загрузить, вот этого процеса я ищу варианты решения.
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32528013
doroshka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот несколько репликаторов:
1. IBReplicator версия 1.5.6 - ПО для репликации БД Firebird/Interbase. Кстати, на этой страничке есть ссылки на несколько документов в которых рассматриваются вопросы репликации и способы решения различных проблем.
2. FBReplicator - простой бесплатный репликатор БД Firebird/InterBase.


А вот ссылка на компонент для Delphi который позволяет делать экспорт в SQL скрипт. (правда в том что есть у меня в хелпе сказано что только в INSERT), но возможно есть компонент экспортирующий и в UPDATE (в IBExpert-е как-то экспортируется).
http://www.ems-hitech.com/quickexport/

Может поможет? :)
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32528020
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я знаю какие записи добавились или изменились, меня интересует именно момент - взять записи, выгрузить кудато (этот файл не важно какого формата), потом из файла и загрузить, вот этого процеса я ищу варианты решения.

Что тут морочиться - юзай, к примеру, TClientDataSet - он это умеет. Сохраняет/загружает хоть в файл, хоть в поток. Я, к примеру, последний вариант использую, а результирующий поток еще сжимаю. Дешево и сердито.
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32528110
Demosphen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mv Угу, только вот проблема у меня клиент на Visual C++, а этот компонент вроди из дельфи.

doroshka Спасибо, полез ссылки смотреть и пробывать.
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32528116
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пиши репликацию в Билдере!
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32528812
goshanew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Demosphen
проверь профильное мыло.
там пример скрипта
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32529291
Demosphen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goshanew Спасибо, тока ещё вопрос функция RTRIM что делает?
...
Рейтинг: 0 / 0
Синхронизация баз, варианты решения?
    #32529361
Demosphen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goshanew Вопрос про RTRIM снят, сглупил и не посмотрел стандартные UDF.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Синхронизация баз, варианты решения?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]