¿Cómo gestiona la sincronización bidireccional entre un servidor de base de datos 'principal' y muchos servidores 'secundarios', en particular la resolución de conflictos, suponiendo que una conexión no siempre esté disponible?
Por ejemplo, tengo una aplicación móvil que usa CoreData como la 'base de datos' en iOS y me gustaría permitir a los usuarios editar el contenido sin conexión a Internet. Al mismo tiempo, esta información está disponible en un sitio web al que se conectarán los dispositivos. ¿Qué hago si / cuando los datos en los dos servidores DB están en conflicto?
(Me refiero a CoreData como un servidor de base de datos, aunque sé que es algo ligeramente diferente).
¿Existen estrategias generales para tratar este tipo de problema? Estas son las opciones que se me ocurren:
1. Utilice siempre los datos del lado del cliente como de mayor prioridad
2. Lo mismo para el lado del servidor
3. Intente resolver conflictos marcando la marca de tiempo de edición de cada campo y tomando la última edición
Aunque estoy seguro de que la tercera opción abrirá espacio para una corrupción de datos devastadora.
Soy consciente de que el teorema de CAP se refiere a esto, pero solo quiero una consistencia eventual, por lo que no lo descarta por completo, ¿verdad?
Pregunta relacionada: Patrones de mejores prácticas para la sincronización de datos bidireccional . La segunda respuesta a esta pregunta dice que probablemente no se pueda hacer.