Design per la sincronizzazione dei dati dall'API remota

3

Sto cercando di trovare una soluzione solida e corretta per sincronizzare i dati da diverse fonti al mio database relazionale locale.

Ho diverse fonti di dati, ad esempio: CSV, API REST e probabilmente file system condiviso di rete. Queste fonti in qualsiasi momento forniscono l'istantanea del sistema e c'è uno script che viene eseguito settimanalmente e aggiorna il mio database locale con tutte le modifiche. Per un esempio più dettagliato, supponiamo che ci sia un'API che mi fornisce le informazioni di tutti i nomi di database attivi in una VM, la prossima volta che leggerò i dati potrebbe esserci il caso che ci sia più o meno numero di database a seconda che siano stati aggiunti o rimuovi dall'ultima lettura. Il sistema remoto non mantiene tali informazioni storiche.

Nel mio sistema locale devo registrare e conservare queste informazioni.

Sto leggendo i dati dall'API e poi leggendo il database dal mio database locale, faccio una serie di entrambi i nomi del database e facendo l'operazione set per controllare quelle informazioni usando operazioni come intersection , difference ecc. I non so se questo approccio si ridimensiona bene.

Come discusso in prima linea, qual è il modo corretto e efficace per farlo?

    
posta CodeYogi 23.09.2017 - 20:23
fonte

1 risposta

-2

Considera di utilizzare rsync e make .

Non sei chiaro su alcuni punti:

  1. aggiunge dati "nuovi" rispetto agli aggiornamenti che sovrascrivono i dati
  2. disponibilità di timestamp di alta qualità che descrivono "freschezza"
  3. costo delle operazioni remote (ad esempio download REST) rispetto al costo delle operazioni locali

Assumerò:

  1. Possiamo sempre fare un idempotente "cancella le righe esistenti se qualsiasi" più "inserisce le righe correnti".
  2. I timestamp vengono accuratamente segnalati dai server Web e sincronizzati con NTP.
  3. Possiamo ottenere a buon mercato un timestamp HEAD e quindi trasferire i dati se necessario.

Hai sicuramente visto i fileserver remoti che aggiornano i loro file di volta in volta. Ora pensa a CSV, REST e ad altre origini dati come essenzialmente l'aggiornamento dei file del server con mirroring in /tmp . In modo cruciale, i timestamp dei file non verranno modificati se non ci sono stati cambiamenti nei dati sul fileserver remoto.

Ora costruisci un Makefile che mantiene .upd file "aggiornati" aggiornati rispetto a .csv e file di origine simili. La regola make noterebbe .csv che sono più recenti dei corrispondenti file .upd a lunghezza zero e avvia un lavoro DB che cancella le vecchie righe (se presenti) e inserisce le righe .csv. Ripeti per altri tipi di file.

    
risposta data 25.09.2017 - 07:34
fonte