Muy a menudo en mi trabajo surge la idea de la sincronización de datos bidireccional entre sistemas de bases de datos. El ejemplo clásico son dos sistemas CRM ligeramente diferentes (por ejemplo, Raiser's Edge y Salesforce) y la necesidad de tener una sincronización bidireccional de datos de contacto entre ellos.
Dejando a un lado las consideraciones de la API, suponiendo que tenga una clave compartida para sincronizar y simplemente pensando en el algoritmo / patrón que se empleará, esta es una tarea que a menudo no se subestima por los no técnicos.
Por ejemplo, debes tener cuidado con:
- ¿Puede detectar fácilmente qué registros han cambiado en ambos sistemas (o tendrá que comparar todos los registros entre los sistemas para detectar cambios)
- Si va a realizar una sincronización de una vez cada N horas, cómo lidiar con conflictos en los que el mismo registro cambia más o menos al mismo tiempo en ambos sistemas
- Si va a realizar una sincronización en tiempo real (es decir, una actualización en un sistema desencadena inmediatamente una actualización en el otro sistema) cómo manejar la divergencia en el tiempo debido a errores o fallas del sistema
Personalmente, puedo pensar en formas de abordar todo esto, pero me pregunto si hay patrones conocidos, literatura o mejores prácticas a las que pueda referirme.
Respuestas:
Sí, un problema difícil, fácilmente subestimado. Y podría ser mucho trabajo. Si utiliza tecnologías de Microsoft, es posible que desee echar un vistazo a Microsoft Sync Framework aquí y aquí .
fuente
Existen muchas teorías sobre la sincronización de bases de datos de sitios remotos. Primero comience con INSERT. manejar este es fácil, ya que puede crear una ID única para cada sitio (por ejemplo, una inicial del nombre del sitio + ID (número): site_a_177 vs. site_b_53)
Por lo tanto, insertar no debería crear ningún conflicto. El problema es la actualización. No creo que haya un método 100% a prueba de fallas, pero puede comenzar una actualización "bloqueando" el registro en la base de datos remota, y solo después de obtener el identificador: continúe con la actualización y termine sincronizando la actualización y solo entonces suelte la cerradura.
fuente