Creo que, en resumen, sus preguntas se relacionan con la sincronización desconectada.
Así que aquí es lo que creo que debería suceder:
sincronización inicial de recuperar los datos y cualquier información asociada a ella (versiones de filas, las sumas de comprobación de archivos, etc.). es importante que almacene esta información y la deje prístina hasta la próxima sincronización exitosa. Los cambios deben hacerse en una COPIA de estos datos.
Cambios de seguimiento Si se trata de filas de bases de datos, la idea es, básicamente, hacer un seguimiento de las operaciones de inserción, actualización y eliminación. Si está tratando con archivos de texto como xml, entonces es un poco más complicado. Si es probable que varios usuarios editen este archivo al mismo tiempo, entonces debería tener una herramienta de diferencias, para que los conflictos se puedan detectar en un nivel más granular (en lugar de todo el archivo).
Comprobación de conflictos De nuevo, si solo se trata de filas de bases de datos, los conflictos son fáciles de detectar. Puede tener otra columna que se incremente cada vez que se actualice la fila (creo que mssql tiene este built-up no está seguro acerca de mysql). Entonces, si la copia que tiene tiene un número diferente al contenido del servidor, entonces tiene un conflicto. Para archivos o cadenas, una suma de comprobación hará el trabajo. Supongo que también podría usar la fecha de modificación, pero asegúrese de tener una medición muy precisa y precisa para evitar errores.por ejemplo: digamos que recupero un archivo y lo guardas tan pronto como lo recupere. Digamos que la diferencia de tiempo es de 1 milisegundo. Luego hago cambios al archivo y luego intento guardarlo. Si la hora de la última modificación registrada tiene una precisión de solo 10 milisegundos, existe una buena posibilidad de que el archivo que recuperé tenga la misma fecha de modificación que la que guardó para que el programa no crea conflicto y sobrescriba los cambios. Por lo tanto, generalmente no uso este método solo para estar seguro. Por otro lado, las posibilidades de una colisión de checksum/hash después de una modificación menor son casi nulas.
Resolviendo conflictos Ahora esta es la parte difícil. Si se trata de un proceso automatizado, deberá evaluar la situación y decidir si desea sobrescribir los cambios, perder los cambios o recuperar los datos del servidor nuevamente e intentar rehacer los cambios. Afortunadamente para ti, parece que habrá interacción humana. Pero todavía le cuesta mucho codificar. Si está trabajando con filas de bases de datos, puede verificar cada columna individual y compararla con los datos en el servidor y presentarla al usuario. La idea es presentar conflictos al usuario de una manera muy granular para no abrumarlos. La mayoría de los conflictos tienen diferencias muy pequeñas en muchos lugares diferentes, por lo que se presentan al usuario una pequeña diferencia a la vez. Entonces, para los archivos de texto, es casi lo mismo pero más cien veces más complicado. Entonces, básicamente, tendría que crear o usar una herramienta de diferencias (la comparación de texto es un tema completamente diferente y es demasiado amplio para mencionarlo aquí) que le permite conocer los pequeños cambios en el archivo y dónde están de una manera similar a la de un archivo. base de datos: donde se insertó, borró o editó el texto. Luego, presente eso al usuario de la misma manera. así que, básicamente, para cada conflicto pequeño, el usuario debería elegir si desea descartar sus cambios, sobrescribir los cambios en el servidor o realizar una edición manual antes de enviarlos al servidor.
Así que si ha hecho las cosas bien, al usuario se le debe dar una lista de conflictos si los hay. Estos conflictos deben ser lo suficientemente detallados para que el usuario pueda decidir rápidamente. Entonces, por ejemplo, el conflicto es un cambio de ortografía, sería más fácil para el usuario elegir la ortografía de las palabras en contraste con darle al usuario todo el párrafo y decirle que hubo un cambio y que tienen que decidir qué hacer , el usuario tendría que buscar este pequeño error ortográfico.
Otras consideraciones: Validación de datos: tenga en cuenta que debe realizar la validación después de resolver los conflictos ya que los datos pueden haber cambiado Comparación de texto: como dije, este es un tema importante. así que google! Sincronización desconectada: creo que hay algunos artículos por ahí.
Fuente: https://softwareengineering.stackexchange.com/questions/94634/synchronization-web-service-methodologies-or-papers
Gracias por su colaboración. Creo que el problema que has planteado con respecto al sesgo del tiempo es importante. Mi esperanza inicial es que entre NTP en el servidor y los servicios de sincronización de tiempo del iPhone/Touch con el operador/computadora, se mitiguen los problemas de tiempo. ¿Es esta suposición demasiado peligrosa? – hyuan
Es frágil en muchos sentidos; por ejemplo, un reloj que se restablece al revés también puede causar actualizaciones perdidas, y las actualizaciones perdidas pueden ocasionar conflictos de edición no detectados. La replicación multimaestro es una tarea no trivial. –
Gracias por el amable consejo. Con suerte, en un par de semanas, podrás ver los frutos de tu sabiduría. El sitio en cuestión ya está activo (www.ayenotes.com) pero la aplicación de iPhone no. – hyuan