En el mundo de hoy, donde muchas computadoras, dispositivos móviles o servicios web comparten datos o actúan como centros, la sincronización se vuelve más importante. Como todos sabemos, las soluciones que sincronizan no son las más cómodas y lo mejor es no sincronizarlas en absoluto.¿Cuál es el enfoque más inteligente y fácil para sincronizar datos entre múltiples entidades?
Todavía tengo curiosidad de 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 modificada 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 (que en mi opinión no es tan inteligente, porque una máquina no puede adivinar a qué se refería el usuario).
De todos modos, aquí hay un par de preguntas relacionadas con la sincronización que hay que responder antes de comenzar a implementar la sincronización:
- ¿Qué son los datos más recientes? ¿Cómo quiero representarlo?
- ¿Qué debo hacer en caso de conflicto? ¿Unir? ¿Indico y le pregunto al usuario qué hacer?
- ¿Qué hago cuando me encuentro en un estado incoherente (por ejemplo, una desconexión debido a una conexión de red móvil flakey)?
- ¿Qué debo hacer cuando no quiero entrar en un estado incoherente?
- ¿Cómo puedo reanudar 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, Core Data en un iPhone y cómo fusionar/sincronizar los datos sin un montón de código de pegamento)?
- ¿Cómo debo manejar las ediciones del usuario que ocurren durante la sincronización (que se ejecuta en segundo plano, por lo que la IU no está bloqueada)?
- Cómo y en qué dirección propago 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)? ¿El usuario tendrá dos entradas "Foo" con diferentes ID únicos? ¿El usuario tendrá solo una 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 la disyuntiva entre simplificar demasiado las cosas e invertir demasiado tiempo en la implementación?
- ...
Hay muchas otras preguntas y espero que yo pudiera inspirar suficiente. La sincronización es un problema bastante general. Una vez que se encuentra un enfoque bueno y versátil de sincronización, debería ser más fácil aplicarlo a una aplicación concreta, en lugar de comenzar 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 para sincronizar los enfoques en general.
por favor ayuda a introducir algunos algoritmos de sincronización, gracias! – Charles0429
Sí, comparta cualquier algoritmo para que sea más fácil. –
Creo que el No1 debe estar en reversa, el cliente debe determinar los candidatos para la sincronización, no el servidor. por ejemplo, en mi dispositivo LAST_UPDATED_DATE es a las 2:00 p.m., luego hice cambios a las 2:10 p.m. mientras estaba desconectado, pero un colega mío actualizó el mismo registro a las 2:30 p.m. y se guardó, LAST_UPDATED_DATE en el servidor es ahora las 2:30 p.m., perdería los cambios que hice a las 2:10 pm si el servidor debe determinar los candidatos de sincronización. –