Strategie di sync tra database

Pubblicità

cdtux

Utente Èlite
Messaggi
1,829
Reazioni
911
Punteggio
108
Devo creare uno script per sincronizzare i dati di due database eterogenei sia per tecnologie (MSSQL e Postgress) che per struttura delle tabelle/dati.
Mi trovo ad avere un db "master" (MSSQL) sul quale ho accesso in sola lettura (non posso "toccarlo" in alcun modo) e un db "slave" (Postgress) che invece posso implementare a mio piacimento.
Sul db master i vari dati che mi interessano sono divisi tra n tabelle (che ovviamente non hanno timestamp!!! :cav:), sul db slave invece le tabelle sono state unificate e sono stati inseriti dei nuovi fields che mi servono.

Per mantenere in sync i dati pensavo di utilizzare gli hash.
In soldoni, calcolo l'hash (item per item) dei dati del master ogni X minuti/ore, lo confronto con l'hash precedente salvato in una tabella (del tipo: id + old_hash + new_hash + timestamp) e in caso aggiorno i dati.
Anche se non mi sembra un metodo molto efficente, le performance non dovrebbero essere un problema visto che la quantità degli item non è grandissima (sono circa 10k items e se ne aggiungono circa 1k/anno).

Ci sono altre strategie/metodi che potrei utilizzare per sincronizzare i dati dei due db??
 
Devo creare uno script per sincronizzare i dati di due database eterogenei sia per tecnologie (MSSQL e Postgress) che per struttura delle tabelle/dati.
Mi trovo ad avere un db "master" (MSSQL) sul quale ho accesso in sola lettura (non posso "toccarlo" in alcun modo) e un db "slave" (Postgress) che invece posso implementare a mio piacimento.
Sul db master i vari dati che mi interessano sono divisi tra n tabelle (che ovviamente non hanno timestamp!!! :cav:), sul db slave invece le tabelle sono state unificate e sono stati inseriti dei nuovi fields che mi servono.

Per mantenere in sync i dati pensavo di utilizzare gli hash.
In soldoni, calcolo l'hash (item per item) dei dati del master ogni X minuti/ore, lo confronto con l'hash precedente salvato in una tabella (del tipo: id + old_hash + new_hash + timestamp) e in caso aggiorno i dati.
Anche se non mi sembra un metodo molto efficente, le performance non dovrebbero essere un problema visto che la quantità degli item non è grandissima (sono circa 10k items e se ne aggiungono circa 1k/anno).

Ci sono altre strategie/metodi che potrei utilizzare per sincronizzare i dati dei due db??
Stanno sullo stesso server i DB? I dati li modifichi solo da pannello DB o tramite qualche pagina?
 
Sono entrambi sulla stessa macchina fisica: MSSQL su una VM win e Postgress su docker (linux)

EDIT: lo slave è il db di una api sviluppata con flask, quindi lo script di sync sarà scritto in python

EDIT2: il master è il db di un gestionale, quindi ha una sua GUI
 
Hai guardato se il gestionale in questione ha qualche funzione di export o se ha qualche api pubblica? Chiedo perche' a volte espongono funzioni del genere e magari riesci a ricavarti anche il timestamp del dato (potrebbe essere salvato altrove ad uso "interno" del gestionale).

Se non c'e' verso di parlare col gestionale ed il master non puoi maneggiarlo credo che la tua soluzione sia la piu' sensata.
 
Hai guardato se il gestionale in questione ha qualche funzione di export o se ha qualche api pubblica? Chiedo perche' a volte espongono funzioni del genere e magari riesci a ricavarti anche il timestamp del dato (potrebbe essere salvato altrove ad uso "interno" del gestionale).

Se non c'e' verso di parlare col gestionale ed il master non puoi maneggiarlo credo che la tua soluzione sia la piu' sensata.

Api pubbliche non le ha.
Per funzioni di export cosa intendi?? tipo dump del db??

Diciamo poi che il master non vorrei maneggiarlo a prescindere per evitare rogne con eventuali update del software gestionale.. già il db è incasinato di suo :cav:
Comunque, teoricamente, potrei anche creare un superuser per avere il totale controllo del db.

Hai provato a usare questo gestionale?

Ci do un'occhiata.. Grazie
 
Per funzioni di export cosa intendi?? tipo dump del db??
Si, un dump o un export in un formato X che avra' scelto chi ha realizzato il tutto. Era piu' che altro un'idea per vedere se saltavano fuori dei timestamp o altri indici, in modo da non dover ogni volta calcolare un hash per verificare se una determinata tupla esiste gia' nella tabella di destinazione (se ho ben inteso quello che vuoi fare).
 
Purtroppo il dump del db non è di aiuto (in tutto il db non c'è un campo datetime|time|date nemmeno a pagarlo oro, ad esempio le date sono tutte varchar!!! :cav: ).

Penso procederò come ho descritto nel primo post.. vediamo come va..

:brindiamo::thanks:
 
Pubblicità
Pubblicità
Indietro
Top