Sincronización de datos sin conexión

La sincronización de datos sin conexión es una característica del SDK de Azure Mobile Apps. Los datos se almacenan en un almacén local. Aunque la aplicación esté sin conexión, puede crear, modificar y buscar los datos. Los datos se sincronizan con el servicio Azure Mobile Apps cuando el dispositivo está en línea. El SDK admite la resolución de conflictos cuando se cambia el mismo registro tanto en el cliente como en el servicio.

La sincronización sin conexión tiene varias ventajas:

  • Mejora la capacidad de respuesta de la aplicación.
  • Mejora la confiabilidad de la aplicación cuando hay una conectividad de red mala.
  • Limita el uso de las redes medidas o de alta latencia.
  • Admite el uso desconectado.

Los siguientes tutoriales muestran cómo incorporar la sincronización sin conexión a los clientes móviles con Azure Mobile Apps:

¿Qué es una tabla de sincronización?

Los SDK de Azure Mobile Apps proporcionan un elemento IMobileServiceTable que permite acceder directamente al servicio. La operación no se realizará si el dispositivo no tiene una conexión de red. Una tabla de sincronización proporciona las mismas operaciones en una base de datos local. El almacén local se puede sincronizar con el servicio más adelante. Antes de poder realizar cualquier operación, se debe inicializar el almacén local.

¿Qué es un almacén local?

Un almacén local es la capa de persistencia de datos del dispositivo cliente. La mayoría de las plataformas usan SQLite como almacén local, pero iOS usa Core Data. Windows requiere un complemento. Para más información, consulte Windows (UWP): habilitación de la sincronización sin conexión.

También puede implementar su propio almacén local. Por ejemplo, use una versión de SQLite con SQLCipher para generar un almacén cifrado.

¿Qué es un contexto de sincronización?

Un contexto de sincronización está asociado al elemento MobileServiceClient para realizar un seguimiento de los cambios de datos en las tablas de sincronización. El contexto de sincronización mantiene una cola de operaciones. Una cola de operaciones es una lista ordenada de modificaciones pendientes que aún no se han enviado al servidor. Un almacén local se asocia con el contexto de sincronización mediante un método de inicialización como IMobileServicesSyncContext.InitializeAsync(localstore) en el SDK de cliente de .NET.

Funcionamiento de la sincronización sin conexión

El código de cliente determina el momento en que se sincronizan los cambios locales con un servicio de Azure Mobile App. No se envía nada al servicio hasta que se insertan los cambios locales. De igual forma, el almacén local se rellena con nuevos datos solo cuando se extraen datos.

Sincronización

La operación de inserción envía todos los cambios pendientes de la cola de operaciones al servicio. El cambio pendiente se envía al servicio mediante una llamada REST HTTP, que, a su vez modifica la base de datos. Las operaciones de inserción se realizan antes que las operaciones de extracción. La operación de extracción extrae los datos modificados del servicio y los almacena en el almacén local.

Inserción implícita

Si se ejecuta una extracción en una tabla que tiene actualizaciones locales pendientes, la extracción ejecuta primero una inserción en el contexto de sincronización. Esta inserción ayuda a minimizar los conflictos entre los cambios que ya están en cola y los datos nuevos del servidor.

Sincronización incremental

El primer parámetro de la operación de extracción es un nombre de consulta. Si usa un nombre de consulta que no es NULL, el SDK de Azure Mobile realiza una sincronización incremental. Cada vez que se desencadena una operación de extracción, se almacena la marca de tiempo updatedAt más reciente de ese conjunto de resultados. Las operaciones de extracción posteriores solo recuperan los registros posteriores a esa marca de tiempo. Para usar la sincronización incremental, el servidor debe devolver valores updatedAt significativos. El nombre de consulta debe ser único para cada consulta lógica de la aplicación.

Si la consulta tiene un parámetro, una forma de crear un nombre de consulta único es incorporar el valor del parámetro. Por ejemplo, si está filtrando por userId, el nombre de consulta podría ser el siguiente (en C#):

await todoTable.PullAsync("todoItems" + userid, syncTable.Where(u => u.UserId == userId));

Si desea cancelar la sincronización incremental, pase null como identificador de consulta. Cada extracción recuperará todos los registros.

Purga

el contenido del almacén local se puede eliminar mediante IMobileServiceSyncTable.PurgeAsync. La purga puede ser necesaria si tiene datos obsoletos en la base de datos cliente o si desea descartar todos los cambios pendientes.

Una purga borra una tabla del almacén local. Recibirá un error si al purgar se quitan los cambios no recibidos. Si recibe un error, puede forzar la purga mediante un parámetro.