Как лучше производить синхронизацию с сервером при нестабильном интернете?

Есть 40-50 устройств, каждое из которых генерирует 3-7к записей в день.
Нужно сохранить все эти данные в БД на сервере, но у устройств невсегда есть стабильный интернет.
При этом устройству для работы необходимо около 1к записей с сервера (они могут изредка добавляться и изменяться).

На сервере хочу использовать postgresql. На устройствах можно тоже использовать postgresql или что то попроще (sqlite) и при появлении интернета синхронизировать их. При этом на устройствах сгенерированные данные после синхронизации хранить не нужно.
Как лучше это реализовать и что можно почитать на эту тему?
  • Вопрос задан
  • 245 просмотров
Решения вопроса 1
Apache CouchDB позволяет автоматически синхронизировать между локальными инстансами у клиентов и инстансом сервера. Также позволяет работать в режиме оффлайн между сеансам обмена.

UPD
После получения дополнительной информации могу предложить другое решение.
На сервере хранить дату последнего сеанса синхронизации клиента.
Клиент должен хранить у себя таблицу с данными в колонках:
Дата, значение, айди клиента, айди параметра из конфигурации

Как только по таймеру пришло время отправлять данные, проверяем накопились ли данные в таблице. Выбираем X первых записей (допустим, 1000) и асинхронно пробуем отправить их на сервер. Если успешно, то удаляем из таблицы записи с выбранными ID. Если нет, то при следующей попытке согласно работе таймера отправляем данные с накопившимися изменениями.
В другом потоке, как только появились новые данные от датчиков, выполняем INSERT в таблицу.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@rPman
Нестабильный интернет бывает разным, но в общем случае решается прослойкой между клиентами и базой данных (обычное дело, да и ради повышения безопасности, в мир базу данных не открывают), время сейчас такое что наилучшее решение - http/https. В этом случае база данных может быть абсолютно любой, хоть текстовый лог хоть oracle.

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

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

Войти через центр авторизации
Похожие вопросы
Искра Екатеринбург
от 80 000 до 100 000 ₽
Art gorka Санкт-Петербург
от 60 000 ₽
от 40 000 до 60 000 ₽
19 апр. 2024, в 17:06
15000 руб./за проект
19 апр. 2024, в 16:53
1000 руб./за проект
19 апр. 2024, в 16:45
5000 руб./за проект