Format Data Hirarkis. Apa kelebihannya dibandingkan dengan format alternatif?

28

Apa manfaat utama dari menyimpan data dalam HDF? Dan apa tugas sains data utama di mana HDF sangat cocok dan bermanfaat?

IharS
sumber

Jawaban:

25

Mungkin cara yang baik untuk memparafrasekan pertanyaannya adalah, apa kelebihannya dibandingkan dengan format alternatif?

Alternatif utama adalah, saya pikir: database, file teks, atau format biner / lainnya.

Opsi-opsi database yang perlu dipertimbangkan mungkin adalah toko kolom atau NoSQL, atau untuk dataset SQLite kecil yang lengkap. Keuntungan utama dari database adalah kemampuan untuk bekerja dengan data yang jauh lebih besar daripada memori, memiliki akses acak atau diindeks, dan untuk menambah / menambahkan / memodifikasi data dengan cepat. Keuntungan utama * dis * adalah lebih lambat dari HDF, untuk masalah di mana seluruh dataset perlu dibaca dan diproses. Kerugian lain adalah bahwa, dengan pengecualian dari database gaya tertanam seperti SQLite, database adalah sebuah sistem (membutuhkan administrasi, pengaturan, pemeliharaan, dll) daripada penyimpanan data mandiri sederhana.

Opsi format file teks adalah XML / JSON / CSV. Mereka cross-platform / bahasa / toolkit, dan merupakan format arsip yang baik karena kemampuannya untuk menggambarkan diri sendiri (atau jelas :). Jika tidak terkompresi, mereka sangat besar (HDF 10x-100x), tetapi jika dikompresi, mereka bisa sangat hemat ruang (XML yang dikompresi hampir sama dengan HDF). Kerugian utama di sini adalah lagi kecepatan: teks parsing jauh, jauh lebih lambat daripada HDF.

Format biner lainnya (file npy / npz numpy, file blz blaze, buffer protokol, Avro, ...) memiliki properti yang sangat mirip dengan HDF, kecuali mereka kurang didukung secara luas (mungkin terbatas hanya pada satu platform: numpy) dan mungkin memiliki batasan spesifik lainnya. Mereka biasanya tidak menawarkan keuntungan menarik.

HDF adalah pelengkap yang baik untuk basis data, mungkin masuk akal untuk menjalankan kueri untuk menghasilkan dataset berukuran kira-kira memori dan kemudian menyimpannya dalam HDF jika data yang sama akan digunakan lebih dari satu kali. Jika Anda memiliki dataset yang diperbaiki, dan biasanya diproses secara keseluruhan, menyimpannya sebagai kumpulan file HDF berukuran tepat bukanlah pilihan yang buruk. Jika Anda memiliki dataset yang sering diperbarui, pementasan beberapa di antaranya sebagai file HDF secara berkala mungkin masih bermanfaat.

Sebagai rangkuman, HDF adalah format yang baik untuk data yang dibaca (atau ditulis) biasanya secara keseluruhan; itu adalah lingua franca atau format pertukaran umum / pilihan untuk banyak aplikasi karena dukungan dan kompatibilitas yang luas, layak sebagai format arsip, dan sangat cepat.

PS Untuk memberikan konteks praktis ini, pengalaman saya yang terbaru membandingkan HDF dengan alternatif, dataset kecil (jauh lebih kecil dari ukuran memori) membutuhkan waktu 2 detik untuk dibaca sebagai HDF (dan sebagian besar dari ini mungkin overhead dari Pandas); ~ 1 menit untuk membaca dari JSON; dan 1 jam untuk menulis ke basis data. Tentu saja penulisan basis data dapat dipercepat, tetapi Anda sebaiknya memiliki DBA yang bagus! Ini adalah cara kerjanya di luar kotak.

Alex I
sumber
Bisakah kita mengatakan bahwa HDF adalah format penyimpanan berbentuk kolom? Saya tidak terlalu mahir dengan salah satu dari ini, tetapi sampel HDF saya telah bekerja dengan tampaknya menyajikan fitur eksternal agregasi data berbasis kolom.
Félix Gagnon-Grenier
Baik basis data dan HDF memberikan "kemampuan untuk bekerja dengan data yang jauh lebih besar daripada memori", jadi saya tidak berpikir itu akurat untuk mengatakan bahwa ini adalah keunggulan dari database dibandingkan HDF karena (apa yang mereka sebut 'parsial i / o' adalah a core feature davis.lbl.gov/Manuals/HDF5-1.8.7/UG/12_Dataspaces.html
David LeBauer
11

Salah satu manfaatnya adalah dukungan luas - C, Java, Perl, Python, dan R semuanya memiliki binding HDF5.

Manfaat lain adalah kecepatan. Saya belum pernah melihatnya diperbandingkan, tetapi HDF seharusnya lebih cepat dari database SQL.

Saya mengerti bahwa ini sangat baik bila digunakan dengan set besar data ilmiah dan data deret waktu - pemantauan jaringan, pelacakan penggunaan, dll.

Saya tidak percaya ada batasan ukuran untuk file HDF (meskipun batas OS masih berlaku.

Steve Kallestad
sumber
5
Dari pengalaman pribadi saya menambahkan bahwa dokumentasi / label bawaan sangat besar. Sekarang semua set data saya dapat disimpan dengan catatan eksplisit dari mana asalnya, frekuensi pengambilan sampel, anomali, dll.
gallamine