¿Cuál es el enfoque más inteligente y fácil para sincronizar datos entre múltiples entidades?

En el mundo de hoy, donde muchas computadoras, dispositivos móviles o servicios web comparten datos o actúan como hubs, la sincronización se vuelve más importante. Como todos sabemos, las soluciones que se sincronizan no son las más cómodas y es mejor no sincronizarlas.

Todavía tengo curiosidad por cómo implementaría una solución de sincronización para sincronizar entre varias entidades. Ya hay muchos enfoques diferentes, como comparar un campo de fecha cambiado o un hash y usar los datos más recientes o dejar que el usuario elija lo que quiere usar en caso de conflicto. Otro enfoque es tratar de fusionar automáticamente los datos en conflicto (lo que, en mi opinión, no es tan inteligente, porque una máquina no puede adivinar qué significaba el usuario).

De todos modos, aquí hay un par de preguntas relacionadas con la sincronización que deberíamos responder antes de comenzar a implementar la sincronización:

¿Cuáles son los datos más recientes? ¿Cómo quiero representarlo?¿Qué hago en caso de conflicto? ¿Unir? ¿Le pido y le pregunto al usuario qué hacer?¿Qué debo hacer cuando entro en un estado incoherente (por ejemplo, una desconexión debido a una conexión de red móvil defectuosa)?¿Qué debo hacer cuando no quiero entrar en un estado inconsistente?¿Cómo reanudo una sincronización actual que se interrumpió?¿Cómo manejo el almacenamiento de datos (por ejemplo, la base de datos MySQL en un servicio web, Datos básicos en un iPhone y cómo fusiono / sincronizo los datos sin mucho código de cola)?¿Cómo debo manejar las ediciones del usuario que ocurren durante la sincronización (que se ejecuta en segundo plano, por lo que no se bloquea la interfaz de usuario)?Cómo y en qué dirección propagaré los cambios (por ejemplo, un usuario crea una entrada "Foo" en su computadora y no se sincroniza; luego está en movimiento y crea otra entrada "Foo"; qué sucede cuando intenta sincronizar ambos dispositivos )? ¿Tendrá el usuario dos entradas "Foo" con diferentes ID únicas? ¿El usuario tendrá una sola entrada, pero cuál?¿Cómo debo manejar la sincronización cuando tengo datos jerárquicos? ¿De arriba hacia abajo? ¿De abajo hacia arriba? ¿Trato cada entrada de forma atómica o solo miro un supernodo? ¿Qué tan grande es el compromiso entre simplificar en exceso las cosas e invertir demasiado tiempo en la implementación?…

Hay muchas otras preguntas y espero poder inspirarte lo suficiente. La sincronización es un problema bastante general. Una vez que se encuentra un enfoque de sincronización bueno y versátil, debería ser más fácil aplicarlo a una aplicación concreta, en lugar de empezar a pensar desde cero. Me doy cuenta de que ya hay muchas aplicaciones que intentan resolver (o resolver con éxito) la sincronización, pero ya son bastante específicas y no dan suficientes respuestas a los enfoques de sincronización en general.

Respuestas a la pregunta(3)

Su respuesta a la pregunta