Best practice / Pattern per la sincronizzazione dei dati bidirezionale

49

Molto spesso nei miei lavori emerge l'idea della sincronizzazione dei dati a 2 vie tra i sistemi di database. L'esempio classico è costituito da due sistemi CRM leggermente diversi (ad esempio, Raiser's Edge e Salesforce) e dalla necessità di disporre di una sincronizzazione bidirezionale dei dati di contatto tra di essi.

Considerazioni sulle API a parte, supponendo che tu abbia una chiave condivisa per la sincronizzazione, e pensando semplicemente all'algoritmo / modello da utilizzare, questo è un compito che viene spesso sottovalutato dai non-tecnici.

Ad esempio, devi fare attenzione a:

  • Puoi facilmente individuare i record modificati in entrambi i sistemi (o dovrai confrontare tutti i record tra i sistemi per rilevare le modifiche)
  • Se stai andando per una sincronizzazione una volta ogni ora, come gestire i conflitti in cui lo stesso record cambia più o meno contemporaneamente in entrambi i sistemi
  • Se stai andando per una sincronizzazione in tempo reale (cioè un aggiornamento in un sistema fa scattare immediatamente un aggiornamento all'altro sistema) come gestire la divergenza nel tempo a causa di bug o crash del sistema

Personalmente riesco a pensare a come affrontare tutto questo, ma mi chiedo se ci siano modelli, letteratura o buone pratiche ben noti a cui potrei far riferimento.

    
posta codeulike 16.02.2012 - 19:09
fonte

2 risposte

8

Sì, un problema difficile, facilmente sottostimato. E potrebbe essere molto lavoro. Se si utilizzano tecnologie Microsoft, è possibile dare un'occhiata a Microsoft Sync Framework qui e qui .

    
risposta data 19.02.2012 - 15:26
fonte
0

Ci sono molte teorie sulla sincronizzazione del DB del sito remoto. Primo avvio con INSERT. gestire questo è facile - come è possibile creare un ID univoco per ogni sito (ad esempio un'iniziale del nome del sito + ID (numero): site_a_177 vs. site_b_53)

Quindi inserire non dovrebbe creare conflitti. il problema è l'aggiornamento. Non credo che esista un metodo a prova di errore al 100%, ma puoi avviare un aggiornamento "bloccando" il record nel DB remoto e solo dopo aver ottenuto l'handle - continua con l'aggiornamento e termina sincronizzando l'aggiornamento e solo allora rilascia il blocco.

    
risposta data 18.02.2012 - 11:41
fonte