Estoy diseñando un sistema desde el cual sincronizaré datos comerciales desde el dispositivo móvil (que tiene una aplicación integrada) que genera datos y los envía de vuelta al servidor. Cada línea sincronizada genera un registro de negocios específico en la base de datos.
Si lo que sincronizo genera datos con una fecha (dentro de los datos de sincronización) inferior a la fecha de la última modificación de mis datos comerciales, debo ignorarlos y simplemente agregar la base de datos de inicio de sesión. Una vez que se procesan los datos cargados, los datos se obtienen de la base de datos y se descargan al dispositivo.
Debido a esta descarga justo después de escribir, la sincronización debe ser sincrónica. Todavía es posible tener un patrón de lector / escritor si algo como esto vale lo suficiente como para reemplazar mi solución existente. Lo más importante es poder descargar datos actualizados. Esa información se obtiene como un todo, no hay diferencia implementada en este momento (puede llegar más tarde, pero eso no será un problema).
Es posible que tenga varias sincronizaciones en el mismo objeto comercial en ejecución, es poco probable pero puede suceder y prefiero poder manejarlo. Se espera que la sincronización dure algunos segundos pero no algunos minutos, a menos que use la aplicación móvil incorporada sin resincronización durante algunos días.
No se espera que el volumen de datos sincronizados sea grande, ni el proceso de sincronización.
Así que termino usando una exclusión mutua en mi método de sincronización, más precisamente, estoy usando Java y puse un método de escritura sincronizado, no todo el proceso de sincronización, para no bloquear la sincronización de solo lectura.
Me gustaría saber :
- Si esto tiene sentido? Mientras el volumen y el tiempo del proceso de sincronización sigan siendo aceptables.
- De manera general, qué conceptos debo mirar. Bonificación: si hay alguna implementación de estos conceptos en un módulo Spring.
fuente
Respuestas:
Un enfoque que he estado investigando durante un tiempo ahora (con cierto éxito) para sincronizar los datos del cliente con los datos del servidor, sin depender de fechas (que podrían no ser confiables) o solicitudes sincrónicas, es una combinación de parches JSON (quizás POJO s en su caso) y fuente de eventos .
La idea básica es que, en lugar de almacenar el estado actual en el cliente y el servidor, el cliente y el servidor almacenan una lista de cambios y se envían mensajes a través de eventos o solicitudes de parches.
Entonces, en lugar de que el cliente envíe todos los datos más una fecha al servidor, el cliente envía un evento, junto con un número de revisión que corresponde a la última vez que el cliente cree que los datos se han actualizado. Algo como esto:
Una vez que el servidor obtiene este evento (asincrónicamente), lo reconcilia con otros eventos que ya haya recibido. Por ejemplo, es posible que otro cliente que trabaje con los mismos datos ya haya modificado algunas cosas, y ahora el número de revisión en el servidor es 5. Por lo tanto, esta revisión deberá aplicarse antes de que se aplicaran los últimos 2, y todos Los clientes deberán ser notificados de este cambio.
Una vez que el servidor finaliza, notifica a todos los clientes interesados los cambios realizados y el nuevo número de revisión actual. Luego, el cliente aplica estos cambios y actualiza su número de revisión interna.
Su kilometraje puede variar, pero espero que ayude.
Editar: otro nombre para este enfoque, o una variación del mismo, se llama cola de mensajes , como se menciona en esta pregunta relacionada .
fuente
El primer problema es usar fechas como una forma de sincronizar datos. Estoy realmente seguro de que no obtuve todos los detalles de su solución, pero diría que:
¿Se generan las fechas en los móviles? En este caso, ¿está seguro de que la aplicación que se ejecuta en los móviles siempre usará las fechas correctas? ¿Qué pasa con un usuario malicioso que de alguna manera puede cambiar la fecha del sistema en su dispositivo móvil? ¿Qué pasa con los usuarios en diferentes zonas horarias? Como @jeffrey te dijo, tal vez no sea el mejor enfoque confiar en las fechas generadas en los dispositivos.
Si lo entendí correctamente, utiliza el Control de concurrencia optimista . No veo nada intrínsecamente incorrecto en su enfoque.
Esta pregunta trata sobre la implementación del bloqueo optimista en primavera . Tal vez puedas encontrar algo de inspiración en él.
fuente