|
|
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, подскажите вариант решения. Есть два офиса, в каждом одна и таже база, необходимо настроить синхронизацию данных. Общий размер базы 500МБ? Ежедневно добавляется данные от 1 до 5 мегабайт, желательно чтобы добавленные (изменённые) данные автоматически паковались ночью и при установке соединения пересылались между офисами? Основной вопрос, как и в каком формате, выгружать данные, чтобы это было быстро и занимало как можно меньше места по объему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 07:53:49 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
Забыл добавить, всё это работает на FireBird 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 07:58:12 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
Ну, я для этих целей писал свой репликатор (у меня стояла задача - синхронизация нескольких баз). Сделал для него несколько настроечных таблиц, сделал логирование всех изменений в рабочих таблицах БД. Работает уже пол-года. Поначалу, конечно, было много граблей, но сейчас все устаканилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 09:53:27 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
Guest шедший мимо Проблема не в отслеживании того что изменилось или добавилось. В какой формат ты выгружал данные, с помошью чего, что более оптимально использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 10:18:52 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
Выгружай прямо в SQL script. Т.е. каждое изменение прямо так как оно должно происходить потом в обновляемой базе (INSERT, UPDATE, DELETE), а потом пакуй каким нибыдь архиватором. Вся прелесть в том что на обновляемой базе потом тебе просто надо будет этот скрипт выполнить и все. Единственная мелочь - это порядок следования обновлений, если у тебя есть ссылочная целостность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 11:07:31 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
2Demosphen Основной вопрос, как и в каком формате, выгружать данные Что-то мне говорит, что это далеко не основной вопрос. Какая разница - какой формат? Хоть графический. 8-) Если ты знаешь что передавать и как это накатить не нарушая целостности - то экономия 100 килбайт и 3 минут для ночного задания - фигня. Самое интересное в этом вопросе обычно справочники, пополняемые в обоих экземплярах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 11:15:47 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
Demosphen Я с форматами не парился. Программка-репликатор коннектится к обеим базам, определяет по логам, что и как менялось, а потом генерит и исполняет соответствующие SQL-операторы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 12:38:49 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
>Guest шедший мимо Любопытно. А что со справочниками? Как обрабатывал задваивание позиций? а потом генерит и исполняет соответствующие SQL-операторы. вот про это можно поподробнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 15:16:59 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
Dik76 Может, весь код в студию предоставить (кстати, разработка была вполне коммерческая)? :)) С задваиванием бороться незачем - на то есть первичные ключи. Уникальность достигается путем задания шага генераторов для каждой базы. В общем, там было использовано довольно много фич такого рода. Вообще говоря, несмотря на неплохо, на первый взгляд, проработанную идею, пришлось наступить на ряд грабель, пока все стало работать как часики :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 15:59:03 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
Guest шедший мимоС задваиванием бороться незачем - на то есть первичные ключи. Уникальность достигается путем задания шага генераторов для каждой базы. В общем, там было использовано довольно много фич такого рода. т.е. ООО "Пупкин" в одной базе и ООО "Пупкин" во второй - это две большие разницы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 16:08:54 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
vis В моем случае записи в справочники добавляются только в основной базе - в остальных они могут только корректироваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 16:19:32 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
хороший у Вас случай :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 16:34:05 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
vis Ну, случай как случай, вполне стандартный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 16:42:00 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
goshanew Мне что-то ручками (программно) генерить скрипт не хочется, а чем бы можно было выгрузить в скрипт я не знаю. Серега С целостностью проблем нет, со справочниками то же они заполняються в одном месте, а потом передаются. Вопрос именно стоит в оптимизации выгркузки и в размере, т.к. если всё будет нормально то планируется делать такую синхронизацию намного чаще. И тогда размер передоваемых данных и скорость выгрузки становятся ой как важны. Guest шедший мимо Тебе проще было, у тебя был возможен конект сразу к двум базам, у меня такой возможности нет, поэтому и важно в чё выгружать. Если сможешь дать ссылку где можно взять пример кода который генерит скрипты буду очень благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2004, 10:55:14 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
2Demosphen Мне что-то ручками (программно) генерить скрипт не хочется Это сильный аргумент. 8-) С целостностью проблем нет, со справочниками то же они заполняються в одном месте, а потом передаются. Ну это уже попроще. Но мне все таки кажется что ты знаешь что надо выгружать. Если знаешь, то автоматизировать это достаточно легко. Например пиши тригерами в отдельную таблицу прямо текст модифицирующего запроса в строковое поле. Чем не способ? Выгружай таблу в текстовый файл, пакуй и вперед с песней. Только не забудь еще реакцию на (не)применение твоего скрипта. Типа флаг - применено/нет на другой машине, а то мало ли, скрипт отослал, а там облом какой нить. Так что надо возвращать протокол применения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2004, 11:30:24 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
Я в своей системе данные для обновления выгружаю в такой формат Код: plaintext 1. В моем случае в лог пишется только ключ измененной записи, какие именно поля были изменены я не рассматриваю и при синхронизации делаю по ключу выборку всей записи и передаю всю запись целиком. Затем все это пакуется и передается на другой комп, там распаковывается, происходит разбор строки и формируется SQL вида: execute procedure table_iu(FIELD1,FIELD2,...,FIELD_N); Эти процедуры легко создаются мастером в IBExpert-е и позволяют вставить запись если ее нет и обновить если она была. Мне кажется формат передачи не так важен. Если пользуешься архиватором, то передаешь ты скрипт или поля с разделителем, разница на одинаковых объемах данных - будет весьма незначительной. А генерить скрипт все равно прийдется. Толи до передачи, толи после... ЗЫ. Видел систему в которой данные выгружались в dbf-ку структура кторой ижетична структуре синхронизируемой таблицы + поле в котором указано что с этой записью делать. И такой есть "транспорт" для данных... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2004, 11:56:14 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
Серега Угу, сильный, если есть примеры кода дай, а то я сам ух как долго буду писать и отлаживать. Да ты прав, что я знаю, что мне надо выгружать, но количество таблиц при передаче может меняться, некоторые могут удаляться, некоторые создаваться. По моим прикидка их количество может достигать сотни. Как ты думаешь очень интересно на каждую таблицу держать дополнительно ещё одну, и как мне потом выгрузить только определенные из них в один файл. А с сотней файлов возиться это уже слишком. Поэтому вопрос и был, какими средствами это можно сделать. Может быть поможет такая формулировка, как выгрузить из базы определённые записи из определённых таблиц (записи и таблицы уже известны) в один файл, формат любой, есть средства для этого. ограничение только стоит на скорость выгрузки и размер файла который получается. Есть ли для этого уже готовые решения, или может кто сталкивался с подобной ситуацией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2004, 12:06:10 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
doroshka Я знаю какие записи добавились или изменились, меня интересует именно момент - взять записи, выгрузить кудато (этот файл не важно какого формата), потом из файла и загрузить, вот этого процеса я ищу варианты решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2004, 12:21:25 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
Вот несколько репликаторов: 1. IBReplicator версия 1.5.6 - ПО для репликации БД Firebird/Interbase. Кстати, на этой страничке есть ссылки на несколько документов в которых рассматриваются вопросы репликации и способы решения различных проблем. 2. FBReplicator - простой бесплатный репликатор БД Firebird/InterBase. А вот ссылка на компонент для Delphi который позволяет делать экспорт в SQL скрипт. (правда в том что есть у меня в хелпе сказано что только в INSERT), но возможно есть компонент экспортирующий и в UPDATE (в IBExpert-е как-то экспортируется). http://www.ems-hitech.com/quickexport/ Может поможет? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2004, 13:10:23 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
Я знаю какие записи добавились или изменились, меня интересует именно момент - взять записи, выгрузить кудато (этот файл не важно какого формата), потом из файла и загрузить, вот этого процеса я ищу варианты решения. Что тут морочиться - юзай, к примеру, TClientDataSet - он это умеет. Сохраняет/загружает хоть в файл, хоть в поток. Я, к примеру, последний вариант использую, а результирующий поток еще сжимаю. Дешево и сердито. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2004, 13:13:34 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
mv Угу, только вот проблема у меня клиент на Visual C++, а этот компонент вроди из дельфи. doroshka Спасибо, полез ссылки смотреть и пробывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2004, 13:47:11 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
Пиши репликацию в Билдере! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2004, 13:50:34 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
Demosphen проверь профильное мыло. там пример скрипта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2004, 17:44:57 |
|
||
|
Синхронизация баз, варианты решения?
|
|||
|---|---|---|---|
|
#18+
goshanew Спасибо, тока ещё вопрос функция RTRIM что делает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2004, 14:41:05 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32526602&tid=1578595]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
80ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
90ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 447ms |

| 0 / 0 |
