mysql - sincronizar - iOS-Mejores prácticas de sincronización de base de datos de servidor y servidor
sincronizar sql server con postgresql (1)
Esta pregunta ya tiene una respuesta aquí:
Estoy empezando a configurar el modelo de datos básicos para una aplicación a gran escala, y esperaba recibir comentarios sobre los métodos / técnicas de sincronización adecuados cuando se trata de la base de datos del servidor y las capacidades fuera de línea.
Uso PHP y mySQL para mi servidor / base de datos web.
Ya sé cómo conectarme, recibir datos, almacenar datos básicos, etc. Busco más ayuda con las metodologías y las instancias particulares de seguimiento de cambios de datos en:
A) Asegúrese de que la aplicación y el servidor estén sincronizados durante el uso en línea y fuera de línea (es decir, la actividad fuera de línea se incrementará una vez que vuelva a estar en línea). B) Optimizar la velocidad de guardar datos en la aplicación.
Mis preguntas principales son:
¿Cuál es la mejor manera de verificar qué datos nuevos / actualizados en la aplicación aún deben sincronizarse (después del uso fuera de línea)?
(es decir, en todas mis Entidades de Datos Centrales pongo un atributo ''isSincronized'' de tipo BOOL. Luego, actualizo a ''SÍ'' una vez enviado con éxito y la respuesta se envía desde el servidor). Es esta la mejor manera?
¿Cuál es la mejor manera de optimizar la velocidad de guardar datos desde el servidor a los datos centrales?
(es decir, ¿cómo puedo actualizar datos en Core Data que es más antiguo que lo que está en la base de datos del servidor sin iterar a través de cada entidad y simplemente actualizar cada vez)? ¿Es posible sin agregar una columna de base de datos del servidor para rastrear las marcas de tiempo de actualización a CADA tabla?
Una vez más, ya sé cómo descargar datos y almacenarlos en Core Data, solo estoy buscando ayuda con las mejores prácticas para garantizar la sincronización en las bases de datos de aplicaciones y servidores, al tiempo que garantizo un tiempo de procesamiento optimizado.
Guardo una última marca de tiempo modificada en la base de datos tanto en los registros de datos básicos en el teléfono como en las tablas de mysql en el servidor.
El teléfono busca todo lo que ha cambiado desde la última sincronización y lo envía al servidor junto con una marca de tiempo de la última sincronización, y el servidor responde con todo lo que ha cambiado al final desde la marca de tiempo de sincronización proporcionada.
El rendimiento es un problema cuando muchos registros han cambiado. Hago la sincronización en un fondo NSOpeartion que tiene su propio contexto de objeto gestionado. Cuando el hilo de fondo ha terminado de realizar cambios en su contexto de objeto gestionado, hay una API para fusionar todos los cambios en el contexto del objeto gestionado del hilo principal, que se puede configurar para descartar todos los cambios si hay algún conflicto causado por el usuario cambia datos mientras se lleva a cabo la sincronización. En ese caso, solo espero unos segundos y luego trato de hacer una sincronización nuevamente.
En hardware más antiguo, incluso después de muchas optimizaciones, era necesario abortar la sincronización por completo si el usuario comenzaba a hacer cosas en la aplicación. Simplemente usaba demasiados recursos del sistema. Creo que los dispositivos iOS más modernos son probablemente lo suficientemente rápidos como para no tener que volver a hacer eso.
(Por cierto, cuando dije "muchos registros han cambiado" me refiero a 30,000 filas o más que se actualizan o se insertan en el teléfono)