Controllo della versione dei dati dell'applicazione

5

In parole povere, il prodotto della mia azienda è una webapp con un backend di database. Abbiamo un ambiente scenico e un ambiente di produzione per ciascuno dei circa 100 clienti. Esiste un database separato per ogni ambiente. I contenuti del database provengono da un numero di file CSV creati e gestiti dal nostro team di dati (non tecnici). I dati sono specifici del cliente e devono essere aggiornati anche quando dev aggiunge nuove funzionalità al prodotto. Tuttavia, non tutti i client utilizzano la stessa versione del prodotto, quindi non solo i contenuti, ma anche la struttura dei CSV varia a seconda del cliente.

Attualmente, i file CSV sono versionati in SVN. Tuttavia, non esiste alcuna separazione tra i dati testati e non testati. Il mio team è responsabile del caricamento di nuovi dati negli ambienti dei clienti, ma siamo già stati masterizzati prima caricando i dati non testati in un ambiente di produzione. La risposta chiara a questo è imitare una configurazione di sviluppo e creare un tronco, rami e tag, dove il tronco è sempre stabile (dati testati), i rami contengono modifiche sperimentali / non testate e i tag vengono creati ogni volta che vengono caricati nuovi dati ambiente.

La mia domanda riguarda la dipendenza tra dati e codice ... quando dev rilascia una versione che include nuove funzionalità, i dati devono essere aggiornati per adattarsi a tali caratteristiche prima di poter aggiornare il codice su un ambiente. Come possiamo tracciare se i dati per un particolare client sono compatibili con una particolare versione di codice?

Il mio primo istinto è creare un ramo nel repository dati ogni volta che viene pianificato un aggiornamento del codice per un determinato cliente. Il nome del ramo corrisponderebbe al numero di versione. Tuttavia, poiché la versione in codice delle nostre caselle di produzione in genere è notevolmente inferiore rispetto a quella dei nostri ambienti di stage, il team di dati dovrebbe lavorare simultaneamente in due rami, assicurando che le nuove funzionalità per il codice più recente e più grande passino solo nel ramo più recente, ma le correzioni continuano anche nel ramo più vecchio. Ovviamente, una volta che il codice sul palco e la produzione divergono, non possiamo essere sicuri al 100% che le correzioni dei dati che testeremo sul palcoscenico funzioneranno sul vecchio codice installato in produzione. Qualcuno ha qualche idea su come possiamo gestire meglio questo processo?

    
posta ThisSuitIsBlackNot 26.05.2011 - 15:20
fonte

2 risposte

4

Wow sembra un pasticcio complicato. Ho già lavorato con questi tipi di sistemi e avere clienti con diverse versioni complica davvero le cose.

Consiglio vivamente di utilizzare il metodo branch. È necessario trattare questi file CSV come codice poiché in pratica lo sono. Dovrebbero essere testati e promossi proprio come faresti con il codice.

    
risposta data 26.05.2011 - 16:34
fonte
2

Avere una tabella che include la versione dei dati. Avere un processo di aggiornamento che prevede l'aggiornamento di tabelle e l'eliminazione / inserimento di dati che sono cambiati tra versioni.

Raccomando vivamente di sviluppare uno standard in cui i dati possano essere aggiornati indipendentemente dalla versione del codice. Renderà le uscite molto più semplici se puoi preparare il database, quindi rilasciare la versione in modo indipendente, anche se ammette che rende lo sviluppo un po 'più complicato.

    
risposta data 26.05.2011 - 16:30
fonte

Leggi altre domande sui tag