Apakah file HDF5 cocok untuk kontrol revisi git?

13

Saya tidak terbiasa dengan format file yang digunakan dalam HDF5, tetapi saya bertanya-tanya apakah file HDF5 cocok untuk kontrol revisi dengan git (atau misalnya Mercurial atau Subversion)? Saya kira apa yang saya maksud adalah: apakah file HDF5 cocok untuk perbedaan berbasis garis atau git harus memperlakukan HDF5 sebagai satu biner besar dan menyimpan seluruh salinan untuk setiap revisi?

Thomas Arildsen
sumber
1
HDF5 dirancang untuk data biner. Mereka tidak benar-benar sesuai untuk perbedaan garis. Yang sedang berkata, jika semua Anda menulis kepada mereka adalah string ASCII, Anda mungkin sebagian besar akan lolos begitu saja. Apa tujuanmu
Bill Barth
Saya hanya ingin tahu apakah mereka akan cocok untuk kontrol revisi. Itu menjadi tidak nyaman jika pelacakan revisi harus menyimpan seluruh salinan baru dari seluruh data yang ditetapkan setiap kali perubahan yang relatif kecil telah dibuat untuk itu.
Thomas Arildsen
1
Jenis data apa yang Anda rencanakan untuk dimasukkan ke file HDF5 Anda? File HDF5 biasanya digunakan untuk input biner besar dan output dari kode simulasi. Yang pertama sering tidak sering berubah, dan tidak jelas bahwa yang terakhir termasuk dalam kontrol revisi. Apa tujuanmu
Bill Barth
Saya sedang memikirkan situasi seperti membuang entri data dari set data Anda karena kontrol kualitas atau menambahkan data tambahan ke set data yang sudah ada.
Thomas Arildsen
2
HDF5 mungkin tidak akan berbeda dengan baik, tetapi Anda harus bertanya pada diri sendiri mana yang lebih penting bagi Anda: ukuran repo Anda, atau fitur yang diberikan HDF5 kepada Anda. Mungkin pertanyaan yang lebih baik adalah "Apa cara terbaik untuk menyimpan data mentah yang menyediakan riwayat versi dan fitur sumber?"
Bill Barth

Jawaban:

9

Anda akan mendapatkan jawaban yang jauh lebih baik jika Anda memberikan beberapa rincian teknis lebih lanjut tentang jenis data apa yang Anda coba letakkan di bawah kontrol versi, bagaimana Anda ingin menyimpan versi data yang berbeda, komponen apa yang cenderung berubah dan komponen apa yang tidak, dan apakah Anda benar-benar akan memiliki sejarah seperti pohon (cabang, gabungan).

File HDF5 tidak cocok untuk kontrol versi berbasis-diff di bawah git.

git menggunakan basis data berbasis hash di bawah tenda, sehingga dimungkinkan untuk menyimpan hash dari file data HDF5 Anda tanpa benar-benar menyimpan file itu sendiri. Tiga proyek, git-fat , git-annex dan git-media , sangat menyederhanakan proses ini untuk Anda. Saya akan menyarankan menggunakan pendekatan ini jika Anda memiliki data yang besar dan sepenuhnya independen yang ingin Anda versi secara eksplisit.

Jika Anda dapat memisahkan penyimpanan data Anda menjadi wilayah yang tidak mudah menguap dan tidak stabil, ini akan sangat meningkatkan efisiensi interaksi Anda dengan basis data kontrol versi. Anda mungkin juga ingin mempertimbangkan untuk secara eksplisit menggunakan database untuk data Anda jika Anda tidak memerlukan fitur DVCS yang ditawarkan git.

Aron Ahmadia
sumber
Database kontrol versi juga dimungkinkan, jika itu yang ingin Anda lakukan, dengan versi mengendalikan skema, membuang database ke file teks, dan versi mengendalikan hasilnya (misalnya, menggunakan git). Lihat stackoverflow.com/questions/846659/… untuk detailnya.
Geoff Oxberry
ada juga git-lampiran
Memming
3

Saya kira apa yang saya maksud adalah: apakah file HDF5 cocok untuk perbedaan berbasis garis atau git harus memperlakukan HDF5 sebagai satu biner besar dan menyimpan seluruh salinan untuk setiap revisi?

Jawaban literal untuk pertanyaan ini adalah bahwa git tidak akan memperlakukan file HDF5 secara efisien.

Untuk jawaban yang lebih berguna tentang kontrol versi untuk proyek yang memiliki beberapa file biner, lihat pertanyaan stackoverflow ini: /programming/540535/managing-large-binary-files-with-git

k20
sumber
3

Seperti yang dikatakan orang lain, akan lebih mudah untuk membuat saran yang berguna jika Anda menggambarkan tujuan keseluruhan Anda daripada titik teknis yang tepat. Berikut ini satu saran lagi yang mungkin dapat membantu Anda, tergantung pada apa tujuan Anda.

Proyek ActivePapers ( http://www.activepapers.org/ ) menyediakan kode dan sistem manajemen data di atas HDF5. ActivePaper adalah file HDF5 yang berisi kumpulan data DAN kode yang bekerja dengannya, dengan metadata melacak bagian kode mana yang menghitung dataset mana dan menggunakan data input mana. Dalam kombinasi dengan kontrol versi pada kode sumber dan / atau kontrol versi pada seluruh file HDF5 (menggunakan alat-alat seperti git-lampiran, disebutkan dalam balasan lain), ActivePapers dapat digunakan untuk menghitung versi perhitungan daripada file atau dataset yang terisolasi.

Penafian: Saya adalah penulis ActivePapers.

khinsen
sumber
1
Saat ini saya tidak mengerjakan masalah tertentu, tetapi saya membayangkan beberapa kumpulan data yang mungkin Anda tambahkan data baru dari waktu ke waktu. Dengan setiap tambahan Anda mungkin harus menyimpan seluruh salinan dari seluruh kumpulan data, yang bisa sangat besar, sementara pada prinsipnya, hanya akan diperlukan untuk menyimpan "diff" yang berisi data yang ditambahkan.
Thomas Arildsen
1
Saya tidak mengetahui adanya alat untuk melakukan operasi gaya diff / merge pada data biner, HDF5 atau lainnya. Satu ide menarik untuk melakukan ini dengan ActivePapers adalah menerapkan perubahan dengan memasukkan "skrip tambalan" dalam file bersama dengan data asli. Anda kemudian dapat mengikuti evolusi data sebagai urutan tambalan yang diterapkan. Salah satu keuntungan dari kerangka kerja ActivePapers adalah Anda dapat melakukan tambalan dalam file terpisah dengan referensi yang asli. Itu berarti Anda dapat mempublikasikan data, dan mempublikasikan modifikasi (untuk Anda dan orang lain) nanti, sebagai karya yang terpisah.
khinsen