БД с возможностью синхронизации внутри локальной сети, если пропадает интернет?

Есть 2+N устройств в локальной сети, каждый из них отправляет запрос через интернет в БД. Если интернет пропадает устройства ждут пока тот появиться чтобы через него синхронизировать свои данные с главной БД.
Есть БД для таких целей? Или инструменты передачи данных внутри локальной сети, если интернета нет, чтобы они могли контролировать дубликаты и сообщать об таких?
Устройства работают фактически параллельно с входящими данными, но время запроса и ответа через интернет в БД составляет меньше секунды. Но эта схема к сожалению не масштабируется.
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ответы на вопрос 3
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
master master, kiosk mode mssql, oracle .
Ну и вариант сохранять в приложении только словари из бд и строить записи для дальнейшей синхронизации
Ответ написан
Комментировать
@Drno
В БД же есть репликация...
поставьте в локальной сети БД и реплицируйте с основной через инет
Ответ написан
@rPman
У тебя главная проблема возникает в момент одновременной работы с базой данных несколькими пользователями
Именно эту проблему нужно решать, и в общем случае это непростая задача, если нет сервера.

Держать копию базы данных на самом клиенте проблем не составит, инструменты есть как штатные у баз данных (репликация) так и средствами самого приложения

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

p.s. один из вариантов решения проблемы - допустить конфликты в самой программе, т.е. вот у тебя форма редактирования объекта, если после предыдущего сеанса синхронизации базы появились конфликты, то интерфейс должен показывать это, давать возможность работать со всеми конфликтами и возможность их разруливать (объединение данных если было редактирование с выбором какие поля оставить а какие нет, сложнее со ссылкой на удаляемый объект, в таких случаях нужна возможность либо отменить удаление либо удалить связь с ним)

Вообще понятие 'конфликтное или неточное состояние' - нормальное, в разных системах это представляется по разному, например понятие 'черновик', или статус - принято/на рассмотрении, когда есть специальные люди, приводящие базу в консистентное состояние, и этот процесс непрерывный. Полноценная поддержка всех возможных конфликтов - мечта, так или иначе это реализуют поверх и удерживают способы в голове самих пользователей, ну к примеру в базе нет возможности указать что запись дубликат, на время пока этот дуп разруливается а его связи корректируются и переносятся на один объект, будущий удаляемый помечается как удаляемый через пометку в наименовании... т.е. база статуса на это не имеет но операторы друг с другом договариваются что такие объекты не использовать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы