java - studio - sync adapter android ejemplo
Estrategia para la sincronización de datos en línea/fuera de línea (4)
¿Cuál es el más adecuado como el almacén de datos del lado del cliente en su aplicación? Puede elegir desde una base de datos incrustada como SQLite o una cola de mensajes o algún almacén de objetos o (si ninguno de ellos puede usarse desde una aplicación web) archivos / documentos guardados en el cliente usando Web DB o IndexedDB través de la API LocalStorage HTML 5 .
Consulte el documento Gold Rush: Mobile Transaction Middleware con Java-Object Replication . La documentación de Microsoft de sistemas ocasionalmente conectados describe dos enfoques: orientado a servicios o orientado a mensajes y orientado a datos. Gold Rush toma el enfoque anterior. El enfoque posterior utiliza la replicación de combinación de la base de datos.
Mi requisito es que tenga la aplicación web del servidor J2EE y la aplicación web cliente J2EE. Algunas veces el cliente puede desconectarse. Cuando el cliente se conecta, debería poder sincronizar los cambios de un lado a otro. También debería poder controlar qué filas / tablas deben sincronizarse en función de algunos filtros / reglas. ¿Hay algún framework Java existente para hacerlo? Si necesito implementarlo solo, ¿cuáles son las diferentes estrategias que puede sugerir?
Una solución en mi mente es mantener los registros SQL y ejecutar las mismas declaraciones en el otro lado durante la sincronización. ¿Ves algún problema con esta estrategia?
El problema más importante con la sincronización es cuando el usuario edita algo fuera de línea, y se edita en línea al mismo tiempo. Necesita fusionar los dos datos modificados o tratar con la interfaz de usuario para que el usuario pueda decir qué versión es la correcta. Si elimina la posibilidad de que ambos sean editados al mismo tiempo, entonces no tiene que resolver este problema pegajoso.
El método generalmente es agregar un campo ''modificado'' a todas las tablas, y comparar el campo modificado del cliente para un registro dado en una fila dada, con la fecha modificada del servidor. Si no coinciden, entonces reemplaza los datos del servidor.
Tenga cuidado con las claves autogeneradas: debe asegurarse de que su integridad de datos se mantenga cuando copie desde el cliente al servidor. La ejecución estricta de las sentencias de SQL nuevamente en el servidor podría ponerlo en una situación en la que la clave autogenerada ha cambiado y, de repente, sus claves foráneas apuntan a registros diferentes a los previstos.
A menudo, al importar datos de otra fuente, realiza un seguimiento de la clave primaria de la fuente externa, así como de su clave principal personal. Esto hace que sea más fácil determinar los cambios y las diferencias entre los conjuntos de datos para situaciones de sincronización difíciles.
Hay varias bibliotecas de Java para sincronizar / replicar datos. Dos de los que tengo conocimiento son daffodil y SymmetricDS . En una vida anterior, implementé tontamente (en Java) mi propio proceso de replicación de datos. Parece el tipo de cosa que debería ser bastante sencilla, pero si los datos se pueden actualizar en varios lugares al mismo tiempo, es terriblemente complicado. Recomiendo encarecidamente que use uno de los proyectos antes mencionados para tratar de eludir el manejo de esta complejidad usted mismo.
Su sincronizador debe identificar cuándo se pueden actualizar los datos y cuándo un ser humano necesita mediar un posible conflicto. He escrito un documento que explica cómo hacer esto usando leyes de registro y algebraicas .