Задать вопрос

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

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

На сервере хочу использовать postgresql. На устройствах можно тоже использовать postgresql или что то попроще (sqlite) и при появлении интернета синхронизировать их. При этом на устройствах сгенерированные данные после синхронизации хранить не нужно.
Как лучше это реализовать и что можно почитать на эту тему?
  • Вопрос задан
  • 255 просмотров
Подписаться 3 Средний 13 комментариев
Решение пользователя d'Ivan К ответам на вопрос (2)
2ord
@2ord
Apache CouchDB позволяет автоматически синхронизировать между локальными инстансами у клиентов и инстансом сервера. Также позволяет работать в режиме оффлайн между сеансам обмена.

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

Как только по таймеру пришло время отправлять данные, проверяем накопились ли данные в таблице. Выбираем X первых записей (допустим, 1000) и асинхронно пробуем отправить их на сервер. Если успешно, то удаляем из таблицы записи с выбранными ID. Если нет, то при следующей попытке согласно работе таймера отправляем данные с накопившимися изменениями.
В другом потоке, как только появились новые данные от датчиков, выполняем INSERT в таблицу.
Ответ написан
Комментировать