I file HDF5 sono adatti per il controllo di revisione git?


13

Non ho familiarità con il formato di file utilizzato in HDF5, ma mi chiedo se i file HDF5 sono adatti per il controllo di revisione con git (o per esempio Mercurial o Subversion)? Immagino che cosa intendo: i file HDF5 sono adatti per il diff linea o si dovrà trattare un HDF5 come un grande binario e memorizzare un'intera copia per ogni revisione?


1
HDF5 è progettato per dati binari. Non sono davvero appropriati per la differenza di linea. Detto questo, se tutto ciò che scrivi a loro sono stringhe ASCII, probabilmente lo farai per lo più. Qual è il tuo scopo?
Bill Barth,

Mi chiedevo solo se sarebbero stati adatti per il controllo di revisione. Diventa scomodo se il tracciamento delle revisioni deve memorizzare una copia completamente nuova dell'intero set di dati ogni volta che viene apportata una modifica relativamente piccola ad esso.
Thomas Arildsen,

1
Che tipo di dati avevi intenzione di inserire nei tuoi file HDF5? I file HDF5 vengono in genere utilizzati per input e output binari di grandi dimensioni da codici di simulazione. I primi spesso non cambiano frequentemente e non è chiaro che i secondi appartengano al controllo delle revisioni. Qual è il tuo obiettivo?
Bill Barth,

Sto pensando a situazioni come l'eliminazione delle voci di dati dal tuo set di dati a causa del controllo di qualità o l'aggiunta di dati aggiuntivi a set di dati già esistenti.
Thomas Arildsen,

2
HDF5 probabilmente non differirà bene, ma devi chiederti quale è più importante per te: la dimensione del tuo repository o le funzionalità che HDF5 ti offre. Forse una domanda migliore sarebbe "Qual è il modo migliore per archiviare i dati grezzi che forniscono cronologia delle versioni e funzionalità di provenienza?"
Bill Barth,

Risposte:


9

Otterrai una risposta molto migliore se fornisci alcuni dettagli tecnici in più sul tipo di dati che stai cercando di mettere sotto il controllo della versione, su come vuoi memorizzare diverse versioni dei dati, quali componenti potrebbero cambiare e quali componenti non lo sono e se hai davvero una storia ad albero (rami, fusioni).

I file HDF5 non sono adatti per il controllo di versione basato su diff sotto git.

git utilizza un database basato su hash sotto il cofano, quindi è possibile archiviare l'hash del file di dati HDF5 senza effettivamente archiviare il file stesso. Tre progetti, git-fat , git-annex e git-media , semplificano notevolmente questo processo. Suggerirei di utilizzare questo approccio se disponi di grossi blocchi di dati completamente indipendenti che desideri esplicitamente versione.

Se è possibile separare l'archiviazione dei dati in aree non volatili e volatili, ciò migliorerà notevolmente l'efficienza dell'interazione con il database di controllo della versione. Puoi anche prendere in considerazione l'utilizzo esplicito di un database per i tuoi dati se non hai bisogno delle funzionalità DVCS offerte da git.


È anche possibile controllare la versione dei database, se è quello che vuoi fare, dalla versione che controlla lo schema, scaricando il database in un file di testo e dalla versione che controlla il risultato (ad esempio, usando git). Per ulteriori dettagli, consultare stackoverflow.com/questions/846659/… .
Geoff Oxberry,

c'è anche git-annex
Memming il

3

Immagino che cosa intendo: i file HDF5 sono adatti per il diff linea o si dovrà trattare un HDF5 come un grande binario e memorizzare un'intera copia per ogni revisione?

La risposta letterale a questa domanda è che git non tratterà i file HDF5 in modo efficiente.

Per risposte più utili sul controllo della versione per i progetti che dispongono di alcuni file binari, vedere questa domanda stackoverflow: /programming/540535/managing-large-binary-files-with-git


3

Come altri hanno detto, sarebbe più facile dare suggerimenti utili se descrivessi il tuo obiettivo generale piuttosto che un preciso punto tecnico. Ecco un altro suggerimento che potrebbe aiutarti, a seconda di quale sia il tuo obiettivo.

Il progetto ActivePapers ( http://www.activepapers.org/ ) fornisce un sistema di gestione di codice e dati oltre a HDF5. Un ActivePaper è un file HDF5 che contiene set di dati E il codice che funziona su di essi, con i metadati che tengono traccia di quale parte di codice ha calcolato quale set di dati e utilizzando quali dati di input. In combinazione con il controllo della versione sul codice sorgente e / o il controllo della versione sull'intero file HDF5 (utilizzando strumenti come git-annex, menzionato in un'altra risposta), ActivePapers può essere utilizzato per il calcolo della versione anziché per file o set di dati isolati.

Disclaimer: sono l'autore di ActivePapers.


1
Attualmente non sto lavorando a un problema specifico, ma immaginavo alcuni set di dati a cui potresti aggiungere di volta in volta nuovi dati. Con ogni aggiunta potrebbe essere necessario archiviare un'intera copia dell'intero set di dati, che potrebbe essere molto grande, mentre in linea di principio sarebbe necessario solo memorizzare un "diff" contenente i dati aggiunti.
Thomas Arildsen,

1
Non sono a conoscenza di alcuno strumento per eseguire operazioni di stile diff / merge su dati binari, HDF5 o altro. Un'idea intrigante per farlo con ActivePapers è applicare la modifica includendo uno "script di patch" nel file insieme ai dati originali. È quindi possibile seguire l'evoluzione dei dati come una sequenza di patch applicate. Un vantaggio del framework ActivePapers è che puoi fare le patch in un file separato i riferimenti all'originale. Ciò significa che è possibile pubblicare i dati e pubblicare le modifiche (ai propri e ai dati di qualcun altro) in un secondo momento, come lavoro separato.
Khinsen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.