powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Синхронизация (репликация) БД Firebird
66 сообщений из 66, показаны все 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
Синхронизация (репликация) БД Firebird
    #39689394
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
минус диапазонов - нужно организовать вне-транзакционный "прыжок генератора" со старого диапазона на новый.

можно пытаться предугадать время и прыгнуть заранее, оставив десяток-другой последних ID незаполненными

или брать не напрямую из генератора, а из UDF с межпоточной и межпроцессной блокировкой

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

Как это немного упростить?
Мне на ум только приходит следующая схема:
1) Берется эталонная база, ставится на главный комп, там пользователь забивает все торговые точки какие есть.
2) Программа присваивает текущей базе ID = 1, затем надо как-то тиражировать базы с другими ID под каждую точку.
3) Раскидать готовые базы по точкам.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689398
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchik,

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

или я - плохая девочка, где-то умыкнул твой софт центра, поставил фейковый сервер, а потом подкупил уборщиц на точке, чтобы они её перенастроили с моим сервером общаться вместо настоящего?

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

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

или я - плохая девочка, где-то умыкнул твой софт центра, поставил фейковый сервер, а потом подкупил уборщиц на точке, чтобы они её перенастроили с моим сервером общаться вместо настоящего?

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

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

IMHO изврат, но тогда правильной точке ты высылаешь загрузчик с данными по аутентификации

загрузчик цепляется к серверу, предъявляет свой "паспорт", проверяет "паспорт" сервера, и если всё хорошо - цепляется к БД и выкачивает программу.

Впрочем, выставлять Firebird напрямую в сеть считается вродеж плохим тоном, так что думай о 3-звёнке :-)
Или о виртуальной сети проброшенной через интернет

www.ibase.ru/zebedee/
www.sql.ru/forum/130264/zebedee
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689404
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikно защиту поставлю разумеется

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

если будет 3-х звенка то не фиг парится по поводу подмены БД, путь этим заморачивается промежуточное звено.

Ariochминус диапазонов - нужно организовать вне-транзакционный "прыжок генератора" со старого диапазона на новый.

нафига? Задаёшь диапазоны большими в 1 триллион например и не паришься. Причём сами диапазоны пущай вычисляются на принимающей стороне, а сами БД будут неизменными.
Если параноик проверяй что id < триллиона.

aidynchik,

в общем случае алгоритм такой

лог изменений -> трасформация -> применение изменений

Как раз на этапе трансформации можно например прибавлять к id константы для источника данных. И да трансформация не обязательный этап.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689422
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17.08.2018 12:08, Arioch пишет:
> Или о виртуальной сети проброшенной через интернет
> www.ibase.ru/zebedee/
> www.sql.ru/forum/130264/zebedee

зачем вам эта дохлая зе-бе-дя?
закопайте уже таки стюардессу.
OpenVPN давно уже мейнстрим.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689438
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikВариант с IBReplicator мне не подходит

Чисто из любопытства: чем именно?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689467
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

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

я имею в виду 3-звенку _внутри_ каждой оконечной точки

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


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

на сервере в любом случае тоже надо имет список диапазонов, проверять валидность ID
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689488
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17.08.2018 13:41, Arioch пишет:
> www.ibase.ru/openvpn/ -> 404

да наверное и не надо.
никакой особенной специфики в настройке OpenVPN именно под Firebird не требуется.
да и во всех репозитариях он есть.
ставится стандартно, настраивается тоже не особо хитромудро.

зы: у нас на нём в основном Oracle и местами Firebird (на той же железяке).
разбросано от Минска до Владивостока.
особых проблем не замечено.
если у кого-то иная статистика - высказывайтесь, плс.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689506
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

насколько понимаю, плюс и минус зибиди - это туннельной точка-точка шифрование конкретного соединения

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

ну алгоритмов аутентификации много. После того как принимающая сторона точно убедится, что отправляет именно тот кто надо, из спецтаблицы выбирается диапазон. В общем ничего супер сложного тут нет. Да и говорим мы пока абстрактно, а не о конкртетной реализации. Это так сказать идеи. Вот начнёт ТС делать свой репликатор возникнут у него вопрос, тогда и будем думать о недостатках его подхода.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689559
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17.08.2018 14:36, Arioch пишет:
> а VPN - это всё же склеивание обеих LAN, более сложная и мощная схема.
> иногда это минус, когда я хочу именно пробросить один конкретный канал, типа port forwarding,
> а не настроить раутинг для всех программ во всей подсети

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

но минус этого подхода - что делать если точки сливаются/делятся, как историчность соблюсти ? Надо где-то хранить историю связей разных ID_Point? а чем это отличается от хранения историй диапазонов? Как-то так.

Твоя проблема - неустанные попытки объять необъятное, выискивая немыслимые ситуации. У мну в топе количество пойнтов доходило до 180. Директора менялись, названия менялись, из одного подчинения в другое переходили (там звезда с иерархией), дохли, переезжали, а вот чтоб сливались - не было ни разу. И во всех перечисленных случаях с точки зрения кто кому что должен и фискальной отчётности слияние с утратой истории именно точки как раз недопустимо. А консолидировать в обобщённой статистике можно что и с чем угодно.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689756
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаа вот чтоб сливались - не было ни разу.А у нас было.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39689761
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksСтарый плюшевый мишкаа вот чтоб сливались - не было ни разу.А у нас было.

И как решались вопросы переходящих принятых ранее обязательств и мат ответственности? Неужто заменой ID? Я тут вижу два варианта.
1. Именно слияние. Конгломерат - это новый пойнт. Родители доживают до закрытия своих обязательств.
2. Слияние поглощением. Поглотивший принимает обязательства поглощённого, грубо говоря, покупает его дебиторку-кредиторку и запасы, что регистрируется соответствующими операциями.
Ну или помесь 1 и 2. Никаких изменений ID не нужно. И даже вредно.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39691804
Я проблему ID решал так: все генераторы инкрементируются не на 1, а на 1000. А самое первое значение в каждом филиале задается вручную. Получаются все идентификаторы имеют постфикс в виде номера филиала.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39691823
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соискатель С++,

А чего так слабо? На более тысячи филиалов не надеетесь? Я бы на миллион инкрементировал. Конторы сразу поднимаются, когда видят такой масштаб.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39698411
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня!
Только дошли руки, начал по-тихоньку реализацию, и столкнулся с таким вопросом - а как реплицировать BLOB-поля?
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39698413
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikи столкнулся с таким вопросом - а как реплицировать BLOB-поля?

Так же как и любые другие. В чём проблема-то?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39698442
MikeDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchik, дай угадаю: ты собираешься на БД-источнике формировать sql-выражения, в тексте? А потом полученный скрипт затягивать в БД-приемник? Не надо так делать. Передавай сами данные.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39698521
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikeDD,

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

по вашему примеру хотел сделать

http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=843731&msg=10516083
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39698596
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikпо вашему примеру хотел сделать

"Мопед не мой."
Мой мопед не имеет проблем с блобами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39698809
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

я просто взял его для примера...
а как тогда? переделывать его в base64?
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39698938
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchikа как тогда? переделывать его в base64?

признаться, что задача тебе не по зубам и использовать готовые продукты.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39699115
bsa1959
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стояла когда-то такая задача. Или подобная.
Большое кол-во объектов. Уровней объектов доходило до 6.
И с каждого объекта нужно было отправлять инфу очень хитро.
1.Часть инфы должна была идти на верхний уровень, часть на нижний, часть - на свой уровень, а еще некоторая инфа должна была попадать на нижний уровень через верхний.
2.Часть инфы должна была рассылаться по условиям согласно п.1

Т.е. очень хитрая репликация.

3. Проблему с уникальностью первичных ключей решили следующим образом.
Каждый объект автоматизации имел свой уникальный ID, который генерился на головном серваке.
Первичный ключ состоял из ID объекта, даты создания ключа и значения циклической последовательности для данной таблицы.
Все это делалось на ORACLE. В нем в NUMBER влазило 24 цифирьки. Дату обрезали до часов.

т.е. имели ID типа IIIIYYYYMMDDHHХХХХХХХХХХХХ.

4.Пробовали работать с GUID. Но в патчах ORACLE постоянно видели что GUID ихний имеет свойство повторяться и исправления по нему.
5. Такая система идентификации первичных ключей позволяла даже безболезненно восстанавливать упавшие объекты с верхнего уровня.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39699117
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.09.2018 15:31, bsa1959 пишет:
> т.е. имели ID типа IIIIYYYYMMDDHHХХХХХХХХХХХХ.

не на много лучше составных ключей
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39699121
bsa1959
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящийне на много лучше составных ключей

Я ж конечно не гуру в SQL. Но такой подход позволил решить огромное кол-во задач. Стандартная репликация ORACLE всего этого делать не могла. Или мы не смогли ей воспользоваться под свои нужды......
В том числе и рассылкой инфы по объектам как Бог на душу положит.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39699208
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bsa19594.Пробовали работать с GUID. Но в патчах ORACLE постоянно видели что GUID ихний имеет свойство повторяться и исправления по нему.
надеюсь, в FB такой засады нет?
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39699310
bsa1959
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Докнадеюсь, в FB такой засады нет?
Это вопрос,скорее к разработчикам. Проверяется очень легко. Создаешь таблицу с первичным ключом GUID и запускаешь вставку записей на несколько дней..... У нас через 2-3 дня выскакивало нарушение уникальности..... Поприменяли патчи ORACLE, вроде все хорошо. А после загрузки другого патча или переходе на след.версию могло все повториться. Поэтму бросили мысли про GUID.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39699314
bsa1959
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати...
Тоже самое было у ORACLE с двухфазным commit через DBLINK. На плохих каналах связи или при пропадании канала этот двухфазный COMMIT уходил в такие дебри, что для восстановления обмена приходилось лезть глубоко внутрь системных таблиц. И на одной и второй БД, участвующих в обмене. Патчи помогали, но через какое-то время все могло вернуться. Мы все время грешили на индусов - разработчиков........
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39699616
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bsa1959Поприменяли патчи ORACLE, вроде все хорошо. А после загрузки другого патча или переходе на
след.версию могло все повториться. Поэтму бросили мысли про GUID.

Прелесть GUID же в том, что его можно генерить прямо на клиентах, не грузя лишний раз
сервер. UuidCreateSequentional() - сильная вещь в винде, за линухи не скажу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39699760
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bsa1959Докнадеюсь, в FB такой засады нет?
Это вопрос,скорее к разработчикам.
в надежде на них и спросил
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39699790
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
void GenerateGuid(Guid* guid)
{
	const HRESULT error = CoCreateGuid((GUID*) guid);
	if (!SUCCEEDED(error))
		Firebird::system_call_failed::raise("CoCreateGuid", error);
}


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void GenerateGuid(Guid* guid)
{
	GenerateRandomBytes(guid, sizeof(Guid));

	Win32GUID* wg = (Win32GUID*) guid;
	wg->data3 = (4 << 12) | (wg->data3 & 0xFFF);	// version 4
	wg->data4[0] = 0x80 | (wg->data4[0] & 0x3F);	// variant
}


Как видно, под виндой засады нет, под линухом все вопросы к /dev/urandom.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39699890
bsa1959
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovКак видно, под виндой засады нет, под линухом все вопросы к /dev/urandom.

Сервак у нас как раз под линухом был..... О как все через много лет прояснилось.....
А ответ конечно великолепный. Типа - мопед не мой.
...
Рейтинг: 0 / 0
Синхронизация (репликация) БД Firebird
    #39701204
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем я сделал так:
1. Добавил в таблицу логирования столбец DAT с типом BLOB
2. На таблицы с blob-полями навесил отдельные триггеры, изменения по BLOB-полям вставляются в таблицу логов отдельной записью.
3. При синхронизации на передатчике делаю селект из таблицы логов в Dataset
4. Сохраня Dataset в файл
5. На приемнике восстанавливаю датасет из файла
6. Пробегаюсь по датасету и вставляю все в таблицу логов приемника, а потом уже прогоняю sql-выражения.

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


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