database - sincronización - ¿Cuál es la mejor manera de sincronizar 2 tablas sqlite sobre http y json?
sqlite en la nube (1)
Supongo que es probable que haya cambios al final. No sé el carácter de insertar y actualizaciones, pero esta es mi idea;
- Me gustaría SHA1 (o MD5, no importa en este caso) los días del mes actual y los meses anteriores. Comparar estas huellas dactilares es una forma rápida de ver si las diferencias son. (Me voy hoy sin hablar)
- Si los meses anteriores tienen diferencias;
- Si el volumen de un mes es demasiado grande, podemos dividir el mes y simplemente generar huellas dactilares diarias sobre la marcha en lugar de comparar todo el mes.
- De lo contrario, podemos tratar un cambio mensual de la misma manera que tratamos un cambio diario.
- Después de descubrir dónde ocurren los cambios, la copia maestra enviará una lista de todos los id únicos para ese período. (Siempre enviando la información de hoy)
- El esclavo borra lo que debe eliminarse y compila una lista de identificadores para insertar.
- El maestro envía solo esos registros (en su totalidad).
Las categorías de tiempo (día, mes) se pueden ajustar de acuerdo con el volumen de datos.
Por supuesto, este es un algoritmo ingenuo y simple. Si estuviera procesando datos confidenciales / críticos, buscaría un algoritmo transaccional .
Tengo un problema de sincronización bastante simple. Tengo una tabla con aproximadamente 10 columnas que quiero mantener sincronizada entre un archivo sqlite en 3 clientes diferentes: un cliente de Iphone, un cliente de navegador y un cliente de Ruby on Rails. Necesito una solución de sincronización simple que funcione para los 3, es decir, puedo implementarla fácilmente en Javascript, Objective C y Ruby, y funciona con JSON a través de HTTP. He analizado varios componentes de otras soluciones de sincronización como la de git, algunos de los tutoriales que han surgido de la comunidad de Google Gear y un complemento de carriles llamado acts_as_replica. Mi enfoque ingenuo sería simplemente crear una última marca de tiempo sincronizada en la base de datos y luego crear un registro de cambios de todas las eliminaciones a medida que se realizan. (No permito las actualizaciones de las entradas en la tabla). Luego puedo recuperar todas las entradas nuevas desde la última marca de tiempo, combinarlas con las eliminaciones y enviar un registro de cambios como json sobre http entre las 3 soluciones.
¿Debo considerar el uso de hash SHA1 o un UUID de cada entrada o es suficiente la última marca de tiempo sincronizada? ¿Cómo me aseguro de que no haya entradas duplicadas? ¿Hay algún algoritmo más simple que pueda seguir?