Czy pliki HDF5 nadają się do kontroli wersji git?

13

Nie znam formatu pliku używanego w HDF5, ale zastanawiam się, czy pliki HDF5 nadają się do kontroli wersji za pomocą git (lub na przykład Mercurial lub Subversion)? Wydaje mi się, że mam na myśli: czy pliki HDF5 nadają się do różnicowania na podstawie linii, czy też git będzie musiał traktować HDF5 jako jeden duży plik binarny i przechowywać całą kopię dla każdej wersji?

Thomas Arildsen
źródło
1
HDF5 jest przeznaczony do danych binarnych. Nie są tak naprawdę odpowiednie do różnicowania linii. To powiedziawszy, jeśli wszystko, co do nich napiszesz, to ciągi ASCII, prawdopodobnie prawdopodobnie Ci się to uda. Jaki jest twój cel
Bill Barth,
Zastanawiałem się tylko, czy nadają się do kontroli wersji. Staje się niewygodne, jeśli śledzenie wersji musi przechowywać całą nową kopię całego zestawu danych za każdym razem, gdy wprowadzono w nim stosunkowo niewielką zmianę.
Thomas Arildsen
1
Jakie dane planujesz umieścić w swoich plikach HDF5? Pliki HDF5 są zwykle używane do dużych wejść i wyjść binarnych z kodów symulacji. Te pierwsze często nie zmieniają się często i nie jest jasne, że te drugie należą do kontroli wersji. Jaki jest Twój cel?
Bill Barth
Mam na myśli takie sytuacje, jak odrzucanie wpisów danych z zestawu danych ze względu na kontrolę jakości lub dodawanie dodatkowych danych do zbiorów już istniejących danych.
Thomas Arildsen
2
HDF5 prawdopodobnie nie będzie się dobrze różnił, ale musisz zadać sobie pytanie, co jest dla Ciebie ważniejsze: rozmiar repozytorium lub funkcje, które oferuje HDF5. Być może lepszym pytaniem byłoby „Jaki jest najlepszy sposób przechowywania surowych danych zapewniających historię wersji i funkcje proweniencyjne?”
Bill Barth,

Odpowiedzi:

9

Dostaniesz o wiele lepszą odpowiedź, jeśli podasz kilka dodatkowych szczegółów technicznych na temat tego, jakie dane próbujesz poddać kontroli wersji, w jaki sposób chcesz przechowywać różne wersje danych, jakie składniki mogą się zmienić a jakie elementy nie są i czy naprawdę będziesz mieć drzewiastą historię (gałęzie, scalenia).

Pliki HDF5 nie nadają się do kontroli wersji opartej na różnicach w git.

git używa bazy danych opartej na haszowaniu pod maską, więc możliwe jest przechowywanie skrótu pliku danych HDF5 bez faktycznego przechowywania samego pliku. Trzy projekty, git-fat , git-annex i git-media , znacznie upraszczają ten proces. Sugerowałbym użycie tego podejścia, jeśli masz duże, całkowicie niezależne fragmenty danych, które chciałbyś jawnie zaktualizować.

Jeśli możesz podzielić przechowywanie danych na nietrwałe i niestabilne regiony, znacznie poprawi to efektywność interakcji z bazą danych kontroli wersji. Możesz również rozważyć użycie bazy danych dla swoich danych, jeśli nie potrzebujesz funkcji git oferowanych przez DVCS.

Aron Ahmadia
źródło
Możliwe jest również kontrolowanie wersji baz danych, jeśli to jest to, co chcesz zrobić, poprzez kontrolę wersji schematu, zrzut bazy danych do pliku tekstowego i kontrolę wersji nad wynikiem (np. Za pomocą git). Szczegółowe informacje można znaleźć na stronie stackoverflow.com/questions/846659/ ...
Geoff Oxberry,
jest też git-
Annex
3

Wydaje mi się, że mam na myśli: czy pliki HDF5 nadają się do różnicowania na podstawie linii, czy też git będzie musiał traktować HDF5 jako jeden duży plik binarny i przechowywać całą kopię dla każdej wersji?

Dosłowną odpowiedzią na to pytanie jest to, że git nie traktuje skutecznie plików HDF5.

Aby uzyskać bardziej przydatne odpowiedzi na temat kontroli wersji dla projektów, które mają niektóre pliki binarne, zobacz to pytanie stackoverflow: /programming/540535/managing-large-binary-files-with-git

k20
źródło
3

Jak powiedzieli inni, łatwiej byłoby przedstawić użyteczne sugestie, gdybyś opisał swój ogólny cel, a nie konkretny punkt techniczny. Oto jeszcze jedna sugestia, która może ci pomóc, w zależności od tego, jaki jest twój cel.

Projekt ActivePapers ( http://www.activepapers.org/ ) zapewnia system zarządzania kodem i danymi na HDF5. ActivePaper to plik HDF5, który zawiera zestawy danych ORAZ kod, który na nich działa, a metadane śledzą, który fragment kodu obliczył, który zestaw danych i wykorzystując dane wejściowe. W połączeniu z kontrolą wersji kodu źródłowego i / lub kontrolą wersji całego pliku HDF5 (przy użyciu narzędzi takich jak załącznik git, wspomniany w innej odpowiedzi), ActivePapers mogą być używane do obliczania wersji zamiast izolowanych plików lub zestawów danych.

Oświadczenie: Jestem autorem ActivePapers.

Khinsen
źródło
1
Obecnie nie pracuję nad konkretnym problemem, ale wyobrażałem sobie zestaw danych, do którego od czasu do czasu możesz dodawać nowe dane. Przy każdym dodaniu może być konieczne przechowywanie całej kopii całego zestawu danych, która może być bardzo duża, podczas gdy w zasadzie konieczne byłoby jedynie przechowywanie „różnicy” zawierającej dodane dane.
Thomas Arildsen
1
Nie znam żadnego narzędzia do wykonywania operacji w stylu różnicowania / scalania danych binarnych, HDF5 lub innych. Intrygującym pomysłem, aby to zrobić za pomocą ActivePapers, jest zastosowanie zmiany poprzez włączenie „skryptu łatki” do pliku wraz z oryginalnymi danymi. Następnie możesz śledzić ewolucję danych jako sekwencję zastosowanych poprawek. Jedną z zalet frameworka ActivePapers jest to, że łatki można wykonywać w osobnym pliku, odwołując się do oryginału. Oznacza to, że możesz publikować dane i publikować modyfikacje (własne i cudzych danych) później, jako osobną pracę.
khinsen