Gestione dei dati, quando il database è sotto controllo di versione

1

Attualmente il mio database non è sotto alcun tipo di vcs, possiamo ottenere delta ma questo è tutto. Vorrei provare a rendere le distribuzioni dei prodotti più automatizzate e meno dispendiose in termini di tempo. Capisco che posizionare i file di schema di un db sotto il controllo del codice sorgente ti consenta di gestire le versioni e che questi file siano fondamentalmente per rilasciare le vecchie tabelle / indici / etc e quindi aggiungere le nuove versioni.

La mia domanda è, per quanto riguarda i dati che ci sono già? Perdendo tutto, perdiamo tutti i dati. Quindi, dovremmo fare un dump dei dati prima di aggiornare il database, e quindi ricaricare i dati dopo che l'aggiornamento è stato fatto. Il problema è che alcuni dei nostri database più grandi hanno oltre 80 GB di dati e probabilmente abbiamo un totale di 20 set di database (6 database per set).

Sono sicuro che ciò funzionerebbe, ma vista la dimensione di tutto, c'è una soluzione più semplice che eliminerebbe la necessità di scaricare e ricaricare tutto ogni volta che si verificava un aggiornamento dello schema? E, in caso contrario, non dovremmo scaricare i dati in modo tale che il ricaricamento abbia preso in considerazione il nuovo schema?

    
posta SolomonS 14.08.2014 - 18:31
fonte

1 risposta

2

Ciò che abbiamo usato in un'azienda a cui lavoravo è Liquibase . È una soluzione in Java, ma dal momento che hai sempre bisogno di eseguirlo una volta per ogni aggiornamento del DB, probabilmente funzionerà anche per altre lingue. Sono abbastanza sicuro che ci siano altre soluzioni che funzionano in modo simile, quindi descriverò semplicemente come funziona in generale, quindi puoi cercare qualcosa che funzioni per te:

Hai un file (o una serie di file) con changelogs - comandi che devono essere eseguiti su un DB per aggiornarlo dalla versione a alla versione b . Il DB stesso ha quindi una tabella speciale che tiene traccia di quali di questi comandi sono stati eseguiti contro di esso insieme a checksum, timestamp e altre informazioni misc.

Quindi, quando è necessario apportare un aggiornamento allo schema, aggiungere i comandi che devono essere eseguiti per aggiornare DB senza perdere i dati (probabilmente% istruzioni diUPDATE). Quindi, quando esegui effettivamente l'aggiornamento, l'updater troverà la versione dello schema del DB, troverà tutti gli aggiornamenti che devono essere eseguiti per ottenere dalla versione corrente alla versione più recente ed eseguire solo quelli nell'ordine corretto.

In questo modo non si ricrea lo schema ogni volta e non è necessario ricaricare i dati. È anche automatico e abbastanza veloce rispetto a farlo manualmente o ricreare completamente il DB

    
risposta data 14.08.2014 - 18:49
fonte

Leggi altre domande sui tag