|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
Всем привет! Имеется проект на Firebird 2.5, по учету товаров в магазине. Возникла хотелка у пользователей - видеть, что происходит на торговых точках. А т.к. с интернетом обычно проблема, связь если и есть, то она часто отваливается и вообще качество не очень. Задумался над синхронизацией баз через файлы - надо сливать информацию с торговых точек/складов в одну главную базу, где пользователь уже может просматривать все данные, переключаясь между складами (в программе можно завести несколько складов). Естественно данные по каждому складу должны падать в главную базу под ID этого склада. В главной базе могут оформлять приход товаров, который тоже должен выгружаться в торговые точки. Порыскал и нашел пару вариантов: 1) Через триггеры записывать каждое изменение 2) С помощью IBReplicator. Вот только подойдет ли он для такой ситуации? И насколько я понял, он платный, могу ли я потом ставить его вместе спрограммой пользователям? Если кто-то может помочь, делал такое, или имеет большой опыт в Firebird и репликации - прошу помощи, об оплате можем договориться. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 09:53 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
aidynchik, IBReplicator точно также создаёт триггеры для ведения логов изменений. Про лицензирование это у Dimitry Sibiryakov спроси. авторЕсли кто-то может помочь, делал такое? Тут много таких. Я и сам изобретал свой велосипед. Он даже работает до сих пор. Если решишь идти по трудному пути, т.е. самостоятельно делать логирующие триггеры и применять изменения на главной БД, то спрашивай, поможем советами. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 10:11 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
aidynchik, Думаю у всех репликация сделана на тригерах (у меня в том числе) но долгое это дело... Я все баги лет 10 выдавливал. Наверное купить готовое будет дешевле. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 10:38 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
Шавлюк Евгенийaidynchik, Думаю у всех репликация сделана на тригерах (у меня в том числе) но долгое это дело... Я все баги лет 10 выдавливал. Наверное купить готовое будет дешевле. Не надо грязи :) У меня есть варианты с перекрытием. Маленькие таблицы-справочники - построчное сравнение. (execute statement on external) Это из центра на периферию. Специальные денормализованные таблицы для передачи данных допускают только вставку в коротких транзакциях. Мерджу(?) через (execute statement on external), удаляю в исходнике. В приемнике триггера раскидают по нужным табличкам. Запускается по шедульке. Одно время тянуло 4 вокзала Аэроэкспресса :) Сейчас живет на парковках. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 11:15 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
pastor, Мы говорим про общий принцип, когда передаются только изменения. Он подходит в большинстве случаев. Бывают конечно разные вариации, но это сильно зависит от специфики задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 11:37 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
Шавлюк Евгенийaidynchik, Наверное купить готовое будет дешевле. да, я и хочу купить готовое, а что покупать-то? IBReplicator? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 11:43 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
Симонов Денисaidynchik, Про лицензирование это у Dimitry Sibiryakov спроси. как с ним связаться? тут на форуме нет сообщений ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 11:44 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
aidynchik, для начала следует хорошенько допросить клиента что именно он хочет видеть. Вполне возможно что на деле можно будет обойтись созданием робота по отправке отчетов с удаленных баз либо просто пересылкой неких данных за период. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 11:45 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
Симонов Денисaidynchik, Если решишь идти по трудному пути, т.е. самостоятельно делать логирующие триггеры и применять изменения на главной БД, то спрашивай, поможем советами. главный вопрос по ID, что сделать чтобы они не пересекались? У каждой торговой точки задать диапазон конкретных IDшек? Как вы это решили. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 11:45 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
MikeDDaidynchik, для начала следует хорошенько допросить клиента что именно он хочет видеть. Вполне возможно что на деле можно будет обойтись созданием робота по отправке отчетов с удаленных баз либо просто пересылкой неких данных за период. не всех устраивает, хотят прям видеть все ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 11:46 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
aidynchikнадо сливать информацию с торговых точек/складов в одну главную базу, где пользователь уже может просматривать все данные, переключаясь между складами Тут хорошо бы уточнить что такое "пользователи" и каково твоё место в этой системе. Если это единая система и ты в ней разработчик всего - это одно. Если это тиражируемый продукт и ты админ одной из его копий - совсем другое. aidynchikглавный вопрос по ID, что сделать чтобы они не пересекались? Есть три основных способа: www.ibphoenix.com/ibpr_devel/fireswarm/documentation/dbdesign.html Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 11:57 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
aidynchikглавный вопрос по ID, что сделать чтобы они не пересекались? У каждой торговой точки задать диапазон конкретных IDшек? Как вы это решили. тут может быть много решений. Можно использовать в качестве ID guid, тогда они гарантировано не будут пересекаться, но это не очень удобно. Можно использовать диапазоны. Лично я использовал таблицы перекодировок. Но у меня вообще разные БД. Код: sql 1. 2. 3. 4. 5. 6. 7.
Репликация оффлайновая. Обмен идёт через REST_API в формате JSON ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 12:09 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovЕсли это тиражируемый продукт и ты админ одной из его копий - совсем другое. это тиражируемый продукт, а я разработчик ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 12:14 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
если использовать диапазоны, ведь нет гарантий, что ID не перевалит за диапазон ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 12:14 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
aidynchik, ну это смотря какие диапазоны выбирать. Тип bigint может вмещать 10 18 значений. Если у тебя каждый диапазон отличается на 10 12 , то вероятность что он переполнится почти нулевая ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 12:20 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
aidynchikэто тиражируемый продукт, а я разработчик Тогда ты просто покупаешь пачки лицензий на репликатор со скидкой и включаешь их цену в цену своего продукта. aidynchikесли использовать диапазоны, ведь нет гарантий, что ID не перевалит за диапазон Диапазоны могут быть достаточно большие если ID 64-х разрядный, а диапазон, скажем, 48-ми разрядный. Но лично я рекомендую-таки GUID. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 12:22 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
aidynchikчто ID не перевалит за диапазон есть твой клиент РАЗУМЕЕТСЯ должен отказываться от перехода через диапазон и должен всегда получать от сервера два диапазона: текущий и следующий "double buffering" и "Page flipping" - это же реально основы! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 15:24 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovНо лично я рекомендую-таки GUID. типовая ошибка 90-х: звуковые драйвера кажется Opti не встают на компьютер, накотором стоит fineReader таки да, они заняли одинаковый GUID ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 15:25 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
Я, наверное, слишком примитивен, до деления диапазонов не дорос, всё как-то по-лапотному думаю, насчёт композитных PK типа (ID_Point, ID_In_Table)... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 22:10 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
всем спасибо за советы! Вариант с IBReplicator мне не подходит, буду делать свой велосипед. будут вопросы - напишу ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2018, 07:37 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
Ariochтвой клиент РАЗУМЕЕТСЯ должен отказываться от перехода через диапазон и должен всегда получать от сервера два диапазона: текущий и следующий "double buffering" и "Page flipping" - это же реально основы! если не сложно - можно этот момент поподробнее, я не могу сказать, что я прогер от бога ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2018, 07:45 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
да я собственно уже написал все выше любая работа, которая должна идти без задержек, делается минимум в ДВА выходный буфера что ты музыку слушаешь, что кино смотришь, что в стрелялку играешь у тебя есть один буфер, который пошёл в работу (показывается на экране, играет в наушниках/колонках и т.д.), и второй буфер, которой наполняют (распаковывают mp3, строят сцену из полигонов, ...). в тот момент когда пора (буфер построен И пришло время закончить первый буфер) делается переключение, буфера меняются местами (нужно всего лишь два указателя местами поменять). Теперь второй буфер идёт в работу (на экран, колонки, etc), а первый очищается и начинает заполняться данными. Потом они снова меняются местами и т.д. раньше на "пузатых" мониторах переключение буферов подгадывали к V-Sync, естественной паузе в работе любого ЭЛТ-монитора, так эта настройка до сих пор сохранилась ---------------------- ещё частный случай - сохранение любого файла, например посмотри как zip/7-zip/rar изменяют архивы. Они старый файл не убивают, они рядом создают временный файл и начинают в нём создавтаь новый, исправленный архив. И только если это получилось - тогда они делают переключение (переименование двух файлов, а ПОСЛЕ успешного переименования - удаление старого архива). пример школьного подхода, с одним буфером, - S.T.A.L.K.E.R. - если игра крэшилась во время сохранения (а это было часто), то у тебя старого сейва УЖЕ нет, а нового ЕЩЁ нет ----------------- ты спрашиваешь про диапазоны ID - так в твоём случае диапазон - тот же буфер и тоже нуждно иметь два. По одному ты уже работаешь, а другой стоит готовый и ждёт мгновенного включения в работу по исчерпанию первого, потом делаешь "переключение буферов" - заполненный диапазон сливаешь на сервер, а с сервера получаешь новый чистый диапазон на завтра ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2018, 11:50 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
Ariochты спрашиваешь про диапазоны ID - так в твоём случае диапазон - тот же буфер и тоже нуждно иметь два. По одному ты уже работаешь, а другой стоит готовый и ждёт мгновенного включения в работу по исчерпанию первого, потом делаешь "переключение буферов" - заполненный диапазон сливаешь на сервер, а с сервера получаешь новый чистый диапазон на завтра спасибо, понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2018, 11:54 |
|
Синхронизация (репликация) БД Firebird
|
|||
---|---|---|---|
#18+
Старый плюшевый мишка, ну мне этот подход тоже больше делается, например в нём точка в принципе независит от сервера, даже если они год сихнронизироваться не могут. Т.е. точку можно продавать отдельно, а много-точку уже потом продать кому надо. но минус этого подхода - что делать если точки сливаются/делятся, как историчность соблюсти ? Надо где-то хранить историю связей разных ID_Point? а чем это отличается от хранения историй диапазонов? Как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2018, 11:55 |
|
|
start [/forum/topic.php?fid=40&msg=39689142&tid=1560987]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
73ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 184ms |
0 / 0 |