2008-11-29 13 views
12

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. Así que 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 sobre 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.¿Cuál es la mejor manera de sincronizar 2 tablas sqlite con http y json?

¿Debo considerar el uso de hash SHA1 o un UUID de cada entrada o es la última marca de tiempo sincronizada suficiente? ¿Cómo me aseguro de que no haya entradas duplicadas? ¿Hay algún algoritmo más simple que pueda seguir?

Respuesta

2

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 unhashed)
  • 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 identificadores únicos para ese período. (Siempre enviando la información de hoy)
  • El esclavo luego 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 según el volumen de datos.

Por supuesto, este es un algoritmo ingenuo y simple. Si estaba procesando datos sensibles/críticos, buscaría un algoritmo transactional.

Cuestiones relacionadas