Sind HDF5-Dateien für die Versionskontrolle von Git geeignet?

12

Ich bin mit dem in HDF5 verwendeten Dateiformat nicht vertraut, frage mich jedoch, ob HDF5-Dateien für die Versionskontrolle mit Git (oder zum Beispiel Mercurial oder Subversion) geeignet sind. Ich denke, was ich meine ist: Sind HDF5-Dateien für zeilenbasiertes Vergleichen geeignet oder muss git eine HDF5 als eine große Binärdatei behandeln und für jede Revision eine vollständige Kopie speichern?

Thomas Arildsen
quelle
1
HDF5 ist für Binärdaten ausgelegt. Sie eignen sich nicht wirklich für Linienunterschiede. Davon abgesehen, wenn Sie nur ASCII-Zeichenfolgen schreiben, werden Sie wahrscheinlich meistens damit durchkommen. Was ist ihr Zweck?
Bill Barth
Ich habe mich nur gefragt, ob sie für die Revisionskontrolle geeignet sind. Es wird unpraktisch, wenn die Revisionsverfolgung jedes Mal, wenn eine relativ kleine Änderung daran vorgenommen wurde, eine vollständige neue Kopie des gesamten Datensatzes speichern muss.
Thomas Arildsen
1
Welche Art von Daten wollten Sie in Ihre HDF5-Dateien einfügen? HDF5-Dateien werden normalerweise für große binäre Ein- und Ausgaben von Simulationscodes verwendet. Ersteres ändert sich häufig nicht, und es ist nicht klar, dass Letzteres in die Revisionskontrolle gehört. Was ist dein Ziel?
Bill Barth
Ich denke an Situationen wie das Löschen von Dateneinträgen aus Ihrem Datensatz aufgrund von Qualitätskontrollen oder das Hinzufügen zusätzlicher Daten zu bereits vorhandenen Datensätzen.
Thomas Arildsen
2
HDF5 unterscheidet sich wahrscheinlich nicht gut, aber Sie müssen sich fragen, was für Sie wichtiger ist: die Größe Ihres Repos oder die Funktionen, die HDF5 Ihnen bietet. Vielleicht wäre eine bessere Frage: "Wie lassen sich Rohdaten am besten speichern, die Versionsverlaufs- und Herkunftsmerkmale bieten?"
Bill Barth

Antworten:

9

Sie erhalten eine viel bessere Antwort, wenn Sie ein paar weitere technische Details dazu angeben, welche Art von Daten Sie der Versionskontrolle unterwerfen möchten, wie Sie verschiedene Versionen der Daten speichern möchten und welche Komponenten sich wahrscheinlich ändern werden und welche Komponenten dies nicht sind und ob Sie wirklich einen baumartigen Verlauf haben werden (Verzweigungen, Zusammenführungen).

HDF5-Dateien eignen sich nicht für die diff-basierte Versionskontrolle unter git.

git verwendet eine Hash-basierte Datenbank, sodass es möglich ist, den Hash Ihrer HDF5-Datendatei zu speichern, ohne die Datei selbst zu speichern. Drei Projekte, Git-Fat , Git-Annex und Git-Media , vereinfachen diesen Prozess für Sie erheblich. Ich würde vorschlagen, diesen Ansatz zu verwenden, wenn Sie über große, vollständig unabhängige Datenblöcke verfügen, die Sie explizit versionieren möchten.

Wenn Sie Ihren Datenspeicher in nichtflüchtige und flüchtige Bereiche unterteilen können, wird die Effizienz Ihrer Interaktion mit der Versionskontrolldatenbank erheblich verbessert. Möglicherweise möchten Sie auch explizit eine Datenbank für Ihre Daten verwenden, wenn Sie die DVCS-Funktionen von git nicht benötigen.

Aron Ahmadia
quelle
Sie können Datenbanken auch versionieren, indem Sie das Schema versionieren, die Datenbank in eine Textdatei kopieren und das Ergebnis versionieren (z. B. mit git). Weitere Informationen finden Sie unter stackoverflow.com/questions/846659/… .
Geoff Oxberry
Es gibt auch Git-Anhang
Memming
3

Ich denke, was ich meine ist: Sind HDF5-Dateien für zeilenbasiertes Vergleichen geeignet oder muss git eine HDF5 als eine große Binärdatei behandeln und für jede Revision eine vollständige Kopie speichern?

Die wörtliche Antwort auf diese Frage ist, dass Git HDF5-Dateien nicht effizient behandelt.

Weitere nützliche Antworten zur Versionskontrolle für Projekte mit Binärdateien finden Sie in der folgenden Frage zum Stackoverflow: /programming/540535/managing-large-binary-files-with-git

k20
quelle
3

Wie andere sagten, wäre es einfacher, nützliche Vorschläge zu machen, wenn Sie Ihr Gesamtziel beschreiben würden, anstatt einen präzisen technischen Punkt. Hier ist noch ein Vorschlag, der Ihnen helfen könnte, je nachdem, was Ihr Ziel ist.

Das ActivePapers-Projekt ( http://www.activepapers.org/ ) bietet zusätzlich zu HDF5 ein Code- und Datenverwaltungssystem. Ein ActivePaper ist eine HDF5-Datei, die Datensätze UND den Code enthält, der auf diesen arbeitet, wobei Metadaten protokollieren, welcher Code welchen Datensatz berechnet hat und welche Eingabedaten verwendet wurden. In Kombination mit der Versionskontrolle für den Quellcode und / oder der Versionskontrolle für die gesamte HDF5-Datei (mithilfe von Tools wie git-annex, wie in einer anderen Antwort erwähnt) können ActivePaper-Dateien für die Versionierung von Berechnungen anstelle von isolierten Dateien oder Datensätzen verwendet werden.

Haftungsausschluss: Ich bin der Autor von ActivePapers.

khinsen
quelle
1
Ich arbeite derzeit nicht an einem bestimmten Problem, aber ich stellte mir einen Datensatz vor, zu dem Sie möglicherweise von Zeit zu Zeit neue Daten hinzufügen. Bei jedem Zusatz muss möglicherweise eine vollständige Kopie des gesamten Datensatzes gespeichert werden, was sehr umfangreich sein kann, während im Prinzip nur ein "diff" gespeichert werden muss, das die hinzugefügten Daten enthält.
Thomas Arildsen
1
Mir ist kein Tool zur Ausführung von Operationen im Diff / Merge-Stil für Binärdaten, HDF5 oder auf andere Weise bekannt. Eine interessante Idee, dies mit ActivePapers zu tun, besteht darin, die Änderung anzuwenden, indem ein "Patch-Skript" zusammen mit den Originaldaten in die Datei eingefügt wird. Sie können dann die Entwicklung der Daten als Folge der angewendeten Patches verfolgen. Ein Vorteil des ActivePapers-Frameworks besteht darin, dass Sie die Patches in einer separaten Datei ausführen können, die auf das Original verweist. Das heißt, Sie können Daten veröffentlichen und Änderungen (an Ihren eigenen Daten und den Daten anderer Personen) später als separate Arbeit veröffentlichen.
Khinsen