Приложение
У меня есть веб-приложение, которое в настоящее время использует AppCache для автономной работы, так как пользователям системы необходимо создавать документы в автономном режиме. Документ сначала создается в автономном режиме, и когда доступен доступ в Интернет, пользователь может нажать "синхронизация", которая отправит документ на сервер и сохранит его как ревизию. Чтобы быть более конкретным, приложение не сохраняет изменение delta как ревизию (точное изменение поля), а весь документ целиком. Другими словами, сохраняется документ "моментальный снимок".
Проблема
Пользователи могут входить в систему из разных браузеров и устройств и работать с их документами. Когда они нажимают "sync", если документ сервера более новый, полная версия клиента будет переопределена сервером. Это приводит к одной основной проблеме, которая изображена на изображении ниже.
Сценарий выше происходит из-за текущей реализации, которая не зависит от дельт (небольшие изменения) и скорее полагается на изменения моментальных снимков.
Некоторые вопросы
1) Мои исследования показывают, что я должен модернизировать механизм синхронизации, который должен быть выражен в дельтах (небольшие изменения, которые могут применяться независимо). Является ли это разумным подходом?
2) Должна ли каждая дельта применяться независимо?
2) Согласно моему исследованию, дельта пересмотра имеет числовое значение, а не временную метку. Каким должно быть значение для этого? Как я могу гарантировать, что сервер и клиент согласятся с тем, какой номер версии должен быть?
Информация о стеке
- Angular на интерфейсе
- IndexedDB для сохранения документов локально (автономный режим)
- Postgres DB с JSONB в бэкэнд