HDF5ファイルはgitリビジョン管理に適していますか?


12

私はHDF5で使用されているファイル形式に精通していませんが、HDF5ファイルがgit(またはMercurialやSubversionなど)のリビジョン管理に適しているかどうか疑問に思っていますか?つまり、HDF5ファイルは行ベースの差分に適していますか、またはgitはHDF5を1つの大きなバイナリとして扱い、各リビジョンのコピー全体を保存する必要がありますか?


1
HDF5はバイナリデータ用に設計されています。これらは、実際には行の差分には適していません。そうは言っても、それらに書き込むすべてがASCII文字列である場合は、おそらくほとんどそれで済ますでしょう。あなたの目的は何ですか?
ビル・バルト

リビジョン管理に適しているのかと思っていました。比較的小さな変更が加えられるたびに、変更追跡でデータセット全体の新しいコピー全体を保存する必要がある場合は不便です。
トーマスアリドセン

1
HDF5ファイルにはどのような種類のデータを入れる予定でしたか?HDF5ファイルは通常、シミュレーションコードからの大きなバイナリ入力および出力に使用されます。前者は頻繁に変更されないことが多く、後者がリビジョン管理に属することは明らかではありません。あなたの目標は何ですか?
ビル・バルト

品質管理のためにデータセットからデータエントリを破棄したり、既存のデータセットに追加データを追加したりする状況を考えています。
トーマスアリドセン

2
HDF5はおそらく十分に差分をとりませんが、レポのサイズやHDF5が提供する機能など、あなたにとってより重要なことを自問する必要があります。おそらくより良い質問は、「バージョン履歴と来歴機能を提供する生データを保存する最良の方法は何ですか?」
ビル・バルト

回答:


9

バージョン管理下に置くデータの種類、データのさまざまなバージョンの保存方法、変更される可能性のあるコンポーネントに関する技術的な詳細をいくつか提供すると、より良い答えが得られますそして、どのコンポーネントがそうではないか、そしてあなたが本当にツリーのような歴史(ブランチ、マージ)を持っているかどうか。

HDF5ファイルは、gitでのdiffベースのバージョン管理には適していません。

gitは内部でハッシュベースのデータベースを使用するため、実際にファイル自体を保存することなくHDF5データファイルのハッシュを保存することが可能です。git-fatgit-annex、およびgit-mediaの 3つのプロジェクトにより、このプロセスが大幅に簡素化されます。明示的にバージョン管理したい、完全に独立した大きなデータチャンクがある場合は、このアプローチを使用することをお勧めします。

データストレージを不揮発性領域と揮発性領域に分離できる場合、バージョン管理データベースとのやり取りの効率が大幅に向上します。gitが提供するDVCS機能が必要ない場合は、データにデータベースを明示的に使用することを検討することもできます。


スキーマをバージョン管理し、データベースをテキストファイルにダンプし、結果をバージョン管理する(たとえば、gitを使用する)ことで、データベースをバージョン管理することもできます。詳細については、stackoverflow.com / questions / 846659 /…を参照してください。
ジェフオックスベリー

git-別館もあります
Memming

3

つまり、HDF5ファイルは行ベースの差分に適していますか、またはgitはHDF5を1つの大きなバイナリとして扱い、各リビジョンのコピー全体を保存する必要がありますか?

この質問に対する文字通りの答えは、gitはHDF5ファイルを効率的に処理しないということです。

いくつかのバイナリファイルがあるプロジェクトのバージョン管理に関するより有用な回答については、このstackoverflowの質問を参照してください:https : //stackoverflow.com/questions/540535/managing-large-binary-files-with-git


3

他の人が言ったように、正確な技術的なポイントではなく、全体的な目標を説明すれば、役に立つ提案をする方が簡単です。目標に応じて、さらに役立つ提案をもう1つ紹介します。

ActivePapersプロジェクト(http://www.activepapers.org/)は、HDF5の上にコードおよびデータ管理システムを提供します。ActivePaperは、データセットとそれらに作用するコードを含むHDF5ファイルです。メタデータは、どのコードがどのデータセットを計算し、どの入力データを使用するかを追跡します。ソースコードのバージョン管理および/またはHDF5ファイル全体のバージョン管理(別の返信に記載されているgit-annexなどのツールを使用)と組み合わせて、ActivePapersは、孤立したファイルまたはデータセットではなく、計算のバージョン管理に使用できます。

免責事項:私はActivePapersの著者です。


1
現在特定の問題に取り組んでいるわけではありませんが、時々新しいデータを追加する可能性のあるデータセットを想像していました。追加するたびに、データセット全体のコピー全体を保存する必要がありますが、これは非常に大きくなる可能性がありますが、原則として、追加されたデータを含む「diff」のみを保存する必要があります。
トーマスアリドセン14年

1
私は、バイナリデータ、HDF5などでdiff / mergeスタイルの操作を行うツールを知りません。ActivePapersでこれを行う興味深いアイデアの1つは、元のデータとともにファイルに「パッチスクリプト」を含めることで変更を適用することです。その後、一連の適用されたパッチとしてデータの進化をたどることができます。ActivePapersフレームワークの利点の1つは、元のファイルを参照する別のファイルでパッチを実行できることです。つまり、データを公開し、後で(自分自身と他の人のデータに)変更を個別の作品として公開できます。
khinsen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.