АРР,
У меня есть веб-приложение, которое в настоящее время использует AppCache для автономной функциональности, так как пользователи системы должны создавать документы в автономном режиме. Документ сначала создается в автономном режиме, и когда доступен доступ в Интернет, пользователь может нажать «синхронизация», которая отправит документ на сервер и сохранит его как ревизию. Чтобы быть более конкретным, приложение не сохраняет изменение delta как ревизию (точное изменение поля), а весь документ целиком. Другими словами, сохраняется документ «моментальный снимок».Улучшение клиент-серверной функции синхронизации данных с дельт
Проблема
Пользователи могут войти в систему из разных браузеров и устройств и работы по их документам. Когда они нажимают «sync», если документ сервера новее, вся версия клиента будет переопределена сервером. Это приводит к одной основной проблеме, которая изображена на изображении ниже.
Сценарий выше происходит из-за текущей реализации, которая не опирается на дельтах (небольшие изменения), а скорее опирается на моментальных изменений.
Некоторые вопросы
1) Мои исследования показывают, что должен быть механизм модернизации «синхронизации», чтобы быть выраженным в дельтах (небольшие изменения, которые могут быть применены независимо друг от друга). Это хороший подход?
2) Должны ли каждая дельта применяться независимо?
2) Согласно моим исследованиям, ревизии deltas имеют числовое значение, а не временную метку. Каким должно быть значение для этого? Как я могу гарантировать, что сервер и клиент согласятся с тем, какой номер версии должен быть?
Stack информация
- угловые на интерфейсе
- IndexedDB, чтобы сохранить документы локально (в автономном режиме)
- Postgres БД с JSONB в бэкэнде
Связанные: http://stackoverflow.com/questions/28797992/best-practices-in-syncing-data –
Git уже делает это, может быть, как-то использовать его, чтобы показать разницу пользователя документа. –
Ответ Джека Уэйда суммирует все для вас. С помощью инструмента/скрипта diff вы можете получить дельта, большинство из которых не должно иметь конфликтов (например, отредактированные строки), а затем вам нужно выяснить, как лучше разрешить любые конфликты (например, наши, их, ручное слияние , последние победы и т. д.). –