Up-Sync y Down-Sync en Android?

Estoy trabajando en una aplicación de Punto de Venta que necesita ser muy buena mecanismo de sincronización. Tenemos Magento Database. El dispositivo androide tiene SQLite local Db. Ahora necesitamos sincronizar de la siguiente manera:

Local —— Sync To —————> Servidor (Up Sync)

Server —— Sync To —————> Locals (Sincronización descendente)

Hay 2 cosas:

1) write-to (Cómo cuidar ??)

Para cada cambio que hago en local, sincronizará directamente mi local con el servidor

2) write-back (¿Cómo cuidar ???)

Siempre que hay un cambio en el servidor, necesitamos sincronizar todos nuestros locales con el servidor.

Por lo tanto, la tarea es: identificar una actualización del servidor

Y sincronizar a nuestros lugareños. Al igual que hay 4 dispositivos que se ejecutan en una tienda y hemos añadido un nuevo cliente a través de un dispositivo. Ahora quiero que los otros tres dispositivos locales db también actualizado con la información sobre ese cliente y servidor también actualizado.

He oído hablar de los hilos de fondo y ejecutar hilos después de un intervalo de tiempo. Pero cuál es la mejor manera de hacer eso que no afecta la aplicación. También todas las grandes tiendas minoristas utiliza el proceso de sincronización. Lo que utilizaron para eso?

Cualquier ayuda es apreciada.

Depende completamente de la estructura de la base de datos …

Tiene DATABASE en LOCAL (device) y en SERVER

AHORA

Es necesario que TIMESTAMP fieLd agregue a los TABLES que en realidad se desea mantener en SYNC.

Siempre que usted hará cualquier cambio en el servidor el TIMESTAMP se actualizará allí y lo mismo será el caso de la base de datos local también lo que tiene que hacer es ahora.

Ejecutar un servicio en segundo plano que seguirá comparando los TIMESTAMPS de LOCAL con el de SERVER .

Ahora usted tiene que poner la condición que si TIMESTAMP del SERVER es más nuevo que el de LOCAL entonces trae cambios de SERVER a LOCAL ,

 and vice versa will be the condition to take changes from LOCAL to SERVER. 

Además, usted tiene que decidir la frecuencia con la que desea ejecutar este servicio.

ALTERNATIVAMENTE:

Usted puede hacer la tabla allí en el SERVER que almacenará la fecha de LAST_SYNCHED para el dispositivo particular

Siempre que ingrese en su dispositivo (o cualquier otro evento particular en el que desea que realice esto) el servidor comprobará-

  • Cuando este dispositivo fue LAST_SYNCHED
  • Entonces lo comparará con TODAYS DATE
  • Y comprobará qué upadets realmente sucedió entre estas fechas y enviará los cambios al LOCAL (dispositivo)

Y viceversa para LOCAL (dispositivo) a SERVIDOR

Usted tiene que jugar con TIMESTAMPS resto puede tener su propia lógica de cómo estructurar la base de datos.

Te dije lo que he observado, cuando he sido parte de un proyecto similar

EDITAR

El proceso anterior define cómo sincronizar los dispositivos con el servidor me refiero a la estrategia ..

Si desea que sus dispositivos se notifiquen desde el servidor cuando sincronizar en lugar de pulsar repetidamente el WEB-SERVICE.

Usted puede hacer uso de PUSH NOTIFICACIÓN , GCM es uno de ellos que envía notificación push a los dispositivos, se puede integrar a su proyecto

Para la sincronización es necesario manejar dos situaciones siguientes.

  1. Cómo y cuándo recibir actualizaciones del servidor
  2. Cómo identificar datos locales no sincronizados

Cómo y cuándo recibir actualizaciones de servidor:

Para recibir actualizaciones, podemos usar GCM (Google Cloud Messaging) . Si se realizan actualizaciones en el servidor, el servidor envía un mensaje push a todos los dispositivos. Los dispositivos recibirán ese empuje y basado en el mensaje, los dispositivos descargarán los datos del servidor. (Creo que este es el mejor enfoque que el servicio de golpe continuo para algunos intervalos particulares como sondeo)

Para recibir sólo datos actualizados del servidor, el servidor mantiene la columna modified_timestamp para todas las tablas. Los dispositivos de primera vez enviarán marca de tiempo vacía, de modo que el servidor envíe todos los datos al dispositivo con la marca de hora del servidor. El dispositivo recibe los datos nuevos y actualiza el db local y guarda la última marca de tiempo del servidor. Para la próxima vez que obtenga actualizaciones del servidor, el dispositivo enviará la marca de tiempo del servidor almacenada y el servidor enviará sólo los datos modificados después de esa fecha. Para cada servidor de respuesta envía la marca de tiempo del servidor, los dispositivos deben almacenar esa marca de tiempo y deben utilizarse al llamar al servicio.

Cómo identificar datos locales no sincronizados:

Para enviar actualizaciones locales, db local necesita mantener una columna 'isSynced' en las tablas. Si cualquier fila modificada en local isSynced será falsa, después de la sincronización exitosa de datos locales con el servidor isSynced será verdadera. Para que podamos manejar los datos locales actualizados con el servidor.

Actualizado:

Puede encontrar más información sobre este enlace de desarrollador

¿Ha considerado utilizar una solución comercial?

http://www.mobeelizer.com/ parece como lo que quieres lograr. Probablemente hay muchos otros.

Nota: no hay afiliación con esa empresa.

Yo diría que la declaración del problema es incompleta. En la configuración descrita anteriormente lo que falta es lo que realmente va a sincronizar.

El caso habitual en POS es que existen pocos índices (id, valor, …) tablas que se distribuirán desde el servidor central a los dispositivos cliente. En la mayoría de los casos es lista de precios, lista de existencias, etc Esas tablas rara vez se modifican en los dispositivos cliente (en realidad podría, pero luego tiene que ser redistribuido desde el servidor central y reconocido por los dispositivos cliente).

La otra dirección tienden a ser también bastante sencillo en el dispositivo cliente que generar facturas o facturas. Estas son de nuevo las cosas locales que se propagarán hacia el servidor. Por lo tanto, los almacena de forma local y en el punto de sincronización los envía al servidor. Posteriormente, puede recibir sus propios artículos del servidor como un reconocimiento.

EDIT: para detectar cambios, las marcas de tiempo de escritura como se mencionó anteriormente es una necesidad.

Hasta aquí se describe el flujo de datos.

A continuación, tienes que pasar al dominio de la solución e implementar estas reglas. Hay un par de enfoques de sincronización (ieSyncML). Por otro lado mantenerlo simple rulez. Por lo tanto, la principal preocupación debe ser algún tipo de bloqueo y colas que hace que la cosa robusta.

También podría usar el cliente basado en agente, en tal caso cada dispositivo tiene su propio agente (podría ser la réplica del último estado conocido del db del dispositivo) pero consideraría esto como una característica avanzada que podría venir en la versión futura 🙂

También estoy trabajando en la aplicación de ventas en la que tengo a mis objetivos locales a los objetivos del servidor y el servidor a mis metas locales

Mi proceder es que cada vez que mi aplicación se inicia i obtener los últimos datos de mi servidor de mi todo mi miembro y actualizar mi base de datos local con estos datos y siempre que cambiar los datos en mi base de datos local también actualizar en el lado de los separadores

También utilicé un botón de la sinc. Que buscará los datos más últimos del servidor si mi miembro del equipo cambia su meta o perfil

Si desea actualizar los datos de todos los dispositivos, ¿por qué no utiliza sólo la base de datos remota, por qué está introduciendo la base de datos local para esto.

Para su caso le sugeriré que trabaje con solamente la base de datos alejada directamente así que las cosas se pueden hacer en tiempo real.

  • Monitor de estado de subprocesos. ¿Cómo depurar esto? ¿Qué lo causa?
  • SQLiteOpenHelper sincronización
  • Cómo agregar programaticamente una cuenta personalizada en android?
  • Cómo habilitar la sincronización de la cuenta personalizada en android?
  • ¿Cómo recuperar el tiempo de 'última sincronización' para una cuenta?
  • Artículos de adaptador de sincronización para Android múltiples como Cuenta de Google?
  • Adaptador de sincronización de contactos en android
  • Cómo sincronizar contactos de teléfono en gmail en android mediante programación utilizando google contactos api
  • Añadir cuenta automáticamente
  • Bases de datos de sincronización Mysql SQLite
  • Espere los datos async retrive de Firebase en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.