powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Синхронизация (репликация) БД Firebird
25 сообщений из 66, страница 1 из 3
Синхронизация (репликация) БД Firebird
    #39688559
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Имеется проект на Firebird 2.5, по учету товаров в магазине.
Возникла хотелка у пользователей - видеть, что происходит на торговых точках.
А т.к. с интернетом обычно проблема, связь если и есть, то она часто отваливается и вообще качество не очень.
Задумался над синхронизацией баз через файлы - надо сливать информацию с торговых точек/складов в одну главную базу, где пользователь уже может просматривать все данные, переключаясь между складами (в программе можно завести несколько складов). Естественно данные по каждому складу должны падать в главную базу под ID этого склада.

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

Порыскал и нашел пару вариантов:
1) Через триггеры записывать каждое изменение
2) С помощью IBReplicator. Вот только подойдет ли он для такой ситуации? И насколько я понял, он платный, могу ли я потом ставить его вместе спрограммой пользователям?

Если кто-то может помочь, делал такое, или имеет большой опыт в Firebird и репликации - прошу помощи, об оплате можем договориться.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688571
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchik,

IBReplicator точно также создаёт триггеры для ведения логов изменений.

Про лицензирование это у Dimitry Sibiryakov спроси.

авторЕсли кто-то может помочь, делал такое?

Тут много таких. Я и сам изобретал свой велосипед. Он даже работает до сих пор.
Если решишь идти по трудному пути, т.е. самостоятельно делать логирующие триггеры и применять изменения на главной БД, то спрашивай, поможем советами.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688595
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchik,
Думаю у всех репликация сделана на тригерах (у меня в том числе) но долгое это дело... Я все баги лет 10 выдавливал.
Наверное купить готовое будет дешевле.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688622
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк Евгенийaidynchik,
Думаю у всех репликация сделана на тригерах (у меня в том числе) но долгое это дело... Я все баги лет 10 выдавливал.
Наверное купить готовое будет дешевле.

Не надо грязи :)

У меня есть варианты с перекрытием.

Маленькие таблицы-справочники - построчное сравнение. (execute statement on external)
Это из центра на периферию.


Специальные денормализованные таблицы для передачи данных допускают только вставку в коротких транзакциях.
Мерджу(?) через (execute statement on external), удаляю в исходнике.
В приемнике триггера раскидают по нужным табличкам.

Запускается по шедульке.
Одно время тянуло 4 вокзала Аэроэкспресса :)

Сейчас живет на парковках.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688643
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor,

Мы говорим про общий принцип, когда передаются только изменения. Он подходит в большинстве случаев. Бывают конечно разные вариации, но это сильно зависит от специфики задачи.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688654
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк Евгенийaidynchik,
Наверное купить готовое будет дешевле.
да, я и хочу купить готовое, а что покупать-то? IBReplicator?
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688657
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисaidynchik,
Про лицензирование это у Dimitry Sibiryakov спроси.
как с ним связаться? тут на форуме нет сообщений
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688660
MikeDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchik, для начала следует хорошенько допросить клиента что именно он хочет видеть. Вполне возможно что на деле можно будет обойтись созданием робота по отправке отчетов с удаленных баз либо просто пересылкой неких данных за период.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688662
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисaidynchik,
Если решишь идти по трудному пути, т.е. самостоятельно делать логирующие триггеры и применять изменения на главной БД, то спрашивай, поможем советами.

главный вопрос по ID, что сделать чтобы они не пересекались? У каждой торговой точки задать диапазон конкретных IDшек?
Как вы это решили.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688663
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikeDDaidynchik, для начала следует хорошенько допросить клиента что именно он хочет видеть. Вполне возможно что на деле можно будет обойтись созданием робота по отправке отчетов с удаленных баз либо просто пересылкой неких данных за период.
не всех устраивает, хотят прям видеть все
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688675
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikнадо сливать информацию с торговых точек/складов в одну главную базу, где
пользователь уже может просматривать все данные, переключаясь между складами
Тут хорошо бы уточнить что такое "пользователи" и каково твоё место в этой системе. Если
это единая система и ты в ней разработчик всего - это одно. Если это тиражируемый продукт
и ты админ одной из его копий - совсем другое.

aidynchikглавный вопрос по ID, что сделать чтобы они не пересекались?

Есть три основных способа: www.ibphoenix.com/ibpr_devel/fireswarm/documentation/dbdesign.html
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688691
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikглавный вопрос по ID, что сделать чтобы они не пересекались? У каждой торговой точки задать диапазон конкретных IDшек?
Как вы это решили.

тут может быть много решений. Можно использовать в качестве ID guid, тогда они гарантировано не будут пересекаться, но это не очень удобно. Можно использовать диапазоны.

Лично я использовал таблицы перекодировок. Но у меня вообще разные БД.

Код: sql
1.
2.
3.
4.
5.
6.
7.
create table repl_transfer (
  id not null,                            -- id
  sender_id bigint not null,       -- идентификатор отправляющей БД
  source_id bigint not null,       -- ключ в исходной таблице БД
  dest_id bigint not null,           -- ключ в  таблице приёмнике
  table_id bigint not null           -- идентификатор карты соответствия таблиц
);



Репликация оффлайновая. Обмен идёт через REST_API в формате JSON
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688698
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЕсли это тиражируемый продукт и ты админ одной из его копий - совсем другое.

это тиражируемый продукт, а я разработчик
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688699
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если использовать диапазоны, ведь нет гарантий, что ID не перевалит за диапазон
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688707
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchik,

ну это смотря какие диапазоны выбирать. Тип bigint может вмещать 10 18 значений.
Если у тебя каждый диапазон отличается на 10 12 , то вероятность что он переполнится почти нулевая
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688709
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikэто тиражируемый продукт, а я разработчик

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

aidynchikесли использовать диапазоны, ведь нет гарантий, что ID не перевалит за диапазон

Диапазоны могут быть достаточно большие если ID 64-х разрядный, а диапазон, скажем, 48-ми
разрядный. Но лично я рекомендую-таки GUID.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688935
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikчто ID не перевалит за диапазон

есть

твой клиент РАЗУМЕЕТСЯ должен отказываться от перехода через диапазон и должен всегда получать от сервера два диапазона: текущий и следующий

"double buffering" и "Page flipping" - это же реально основы!
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39688936
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНо лично я рекомендую-таки GUID.

типовая ошибка 90-х: звуковые драйвера кажется Opti не встают на компьютер, накотором стоит fineReader

таки да, они заняли одинаковый GUID
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689142
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, наверное, слишком примитивен, до деления диапазонов не дорос, всё как-то по-лапотному думаю, насчёт композитных PK типа (ID_Point, ID_In_Table)...
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689204
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем спасибо за советы!
Вариант с IBReplicator мне не подходит, буду делать свой велосипед. будут вопросы - напишу
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689205
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochтвой клиент РАЗУМЕЕТСЯ должен отказываться от перехода через диапазон и должен всегда получать от сервера два диапазона: текущий и следующий

"double buffering" и "Page flipping" - это же реально основы!

если не сложно - можно этот момент поподробнее, я не могу сказать, что я прогер от бога
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689380
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да я собственно уже написал все выше

любая работа, которая должна идти без задержек, делается минимум в ДВА выходный буфера

что ты музыку слушаешь, что кино смотришь, что в стрелялку играешь

у тебя есть один буфер, который пошёл в работу (показывается на экране, играет в наушниках/колонках и т.д.), и второй буфер, которой наполняют (распаковывают mp3, строят сцену из полигонов, ...).

в тот момент когда пора (буфер построен И пришло время закончить первый буфер) делается переключение, буфера меняются местами (нужно всего лишь два указателя местами поменять). Теперь второй буфер идёт в работу (на экран, колонки, etc), а первый очищается и начинает заполняться данными. Потом они снова меняются местами и т.д.

раньше на "пузатых" мониторах переключение буферов подгадывали к V-Sync, естественной паузе в работе любого ЭЛТ-монитора, так эта настройка до сих пор сохранилась

----------------------

ещё частный случай - сохранение любого файла, например посмотри как zip/7-zip/rar изменяют архивы. Они старый файл не убивают, они рядом создают временный файл и начинают в нём создавтаь новый, исправленный архив. И только если это получилось - тогда они делают переключение (переименование двух файлов, а ПОСЛЕ успешного переименования - удаление старого архива).

пример школьного подхода, с одним буфером, - S.T.A.L.K.E.R. - если игра крэшилась во время сохранения (а это было часто), то у тебя старого сейва УЖЕ нет, а нового ЕЩЁ нет

-----------------

ты спрашиваешь про диапазоны ID - так в твоём случае диапазон - тот же буфер и тоже нуждно иметь два. По одному ты уже работаешь, а другой стоит готовый и ждёт мгновенного включения в работу по исчерпанию первого, потом делаешь "переключение буферов" - заполненный диапазон сливаешь на сервер, а с сервера получаешь новый чистый диапазон на завтра
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689385
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochты спрашиваешь про диапазоны ID - так в твоём случае диапазон - тот же буфер и тоже нуждно иметь два. По одному ты уже работаешь, а другой стоит готовый и ждёт мгновенного включения в работу по исчерпанию первого, потом делаешь "переключение буферов" - заполненный диапазон сливаешь на сервер, а с сервера получаешь новый чистый диапазон на завтра

спасибо, понял.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689387
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка,

ну мне этот подход тоже больше делается, например в нём точка в принципе независит от сервера, даже если они год сихнронизироваться не могут. Т.е. точку можно продавать отдельно, а много-точку уже потом продать кому надо.

но минус этого подхода - что делать если точки сливаются/делятся, как историчность соблюсти ? Надо где-то хранить историю связей разных ID_Point? а чем это отличается от хранения историй диапазонов? Как-то так.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689389
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochбольше делается

ээээ, нравится, конечно же
...
Рейтинг: 0 / 0
25 сообщений из 66, страница 1 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Синхронизация (репликация) БД Firebird
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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