Требуется подгружать с сервера изменения nosql-документов, когда клиент появляется в сети.
Нужно как-то определять, какие объекты или коллекции были изменены с последнего соединения, чтобы не перебирать (и тем более не передавать) всю базу целиком.
Как это можно сделать?
На сервере использовать CouchDB
На клиенте PouchDB есть реализации под Браузеры, Android, IOS (при желании наверное и под desktop навернуть можно) https://pouchdb.com/faq.html
Интересное решение, но возникает другая проблема. Мне нужно синхронизировать приложение между различными пользователями в реальном времени, ввиду чего предполагалось использовать RethinkDB, которая позволяет подписываться на изменения (не нашёл аналогичной возможности в CouchDB). Эта БД рассылает уведомления всем подписчикам, которых затронули изменения базы, но если подписаться позже, для обновления придётся заново выкачивать коллекцию целиком (всегда есть вероятность, что я чего-то не знаю). Кроме этого, насколько я понял, PouchDB синхронизирует всю базу целиком, хотя нужно синхронизировать только персональные данные.
Возможно, решением будет ручная маркировка документов меткой времени последнего обновления. Тогда в дальнейшем можно будет запросить данные, отфильтрованные с меткой выше заданной.
Александр Таратин, не хочу излишне уточнять, потому что могут придти хорошие решения, под которые можно будет подстроиться.
Не подойдёт что именно - PouchDB?
Дело в том, что метка времени - это пока ещё не полное решение. Следующая проблема в том, что сейчас база на клиенте доступна только для чтения. Данные запрашиваются с агрегацией и при желании изменить что-то на клиенте в оффлайне становится сложно определить, что и где изменять. Запрашивать исходные коллекции и агрегировать на клиенте - плохая практика. Есть идеи?
Эврика! Фокус в том, что те документы, которые требуется сохранять на клиенте, в любом случае придётся передавать целиком, а это значит, что и агрегацию таких документов нужно также выполнять на клиенте. Серверная выборка имеет смысл только там, где данные передаются частично.
Возможно в этом способе найдутся изъяны, но пока-что это видится лучшим решением.