Як ви керуєте двосторонньою синхронізацією між "головним" сервером баз даних та багатьма "вторинними" серверами, зокрема вирішенням конфлікту, якщо припустити, що з'єднання не завжди доступне?
Наприклад, у мене є мобільний додаток, який використовує CoreData як "базу даних" в iOS, і я хотів би дозволити користувачам редагувати вміст без підключення до Інтернету. У той же час ця інформація доступна на веб-сайті, до якого підключатимуться пристрої. Що робити, якщо / коли дані на двох серверах БД конфліктують?
(Я називаю CoreData як сервер БД, хоча я знаю, що це дещо інше.)
Чи є якісь загальні стратегії вирішення подібних питань? Ось такі варіанти, про які я можу подумати:
1. Завжди використовуйте дані на стороні клієнта як пріоритетніші
2. Те саме, що і на стороні сервера
3. Спробуйте вирішити конфлікти, позначивши часову позначку редагування кожного поля та прийнявши останню редагування
Хоча я впевнений, що 3-й варіант відкриє місце для деякої руйнівної корупції даних.
Я знаю, що теорема CAP стосується цього, але я хочу лише можливої узгодженості, тому це не виключає повністю, правда?
Пов'язане питання: Найкращі моделі практичної роботи для двосторонньої синхронізації даних . Друга відповідь на це питання говорить про те, що, ймовірно, це зробити неможливо.