जवाबों:
शायद सवाल का एक अच्छा तरीका यह है कि वैकल्पिक प्रारूपों की तुलना में क्या फायदे हैं?
मुख्य विकल्प हैं, मुझे लगता है: एक डेटाबेस, पाठ फ़ाइलें, या एक अन्य पैक / बाइनरी प्रारूप।
विचार करने के लिए डेटाबेस विकल्प शायद एक स्तंभ भंडार या NoSQL, या छोटे स्व-निहित डेटासेट SQLite के लिए हैं। डेटाबेस का मुख्य लाभ मेमोरी की तुलना में डेटा के साथ काम करने की क्षमता है, यादृच्छिक या अनुक्रमित पहुंच, और डेटा को जल्दी से जोड़ने / संशोधित करने की क्षमता है। मुख्य * डिस * लाभ यह है कि यह एचडीएफ की तुलना में बहुत धीमा है, ऐसी समस्याओं के लिए जिसमें संपूर्ण डेटासेट को पढ़ने और संसाधित करने की आवश्यकता होती है। एक और नुकसान यह है कि SQLite जैसे एम्बेडेड-स्टाइल डेटाबेस के अपवाद के साथ, एक डेटाबेस एक साधारण स्व-निहित डेटा स्टोर के बजाय एक सिस्टम (प्रवेश, सेटअप, रखरखाव, आदि की आवश्यकता है) है।
पाठ फ़ाइल प्रारूप विकल्प XML / JSON / CSV हैं। वे क्रॉस-प्लेटफ़ॉर्म / भाषा / टूलकिट हैं, और आत्म-वर्णन (या स्पष्ट :) होने की क्षमता के कारण एक अच्छा अभिलेखीय प्रारूप हैं। अगर असम्पीडित, वे विशाल (10x-100x HDF) हैं, लेकिन अगर संकुचित, वे काफी स्थान-कुशल हो सकते हैं (संकुचित XML के बारे में HDF के समान है)। यहां मुख्य नुकसान फिर से गति है: पार्सिंग पाठ एचडीएफ की तुलना में बहुत, बहुत धीमा है।
अन्य बाइनरी फॉर्मेट (npy / npz numpy files, blz blaze files, प्रोटोकॉल बफ़र्स, Avro, ...) में HDF के समान गुण हैं, सिवाय इसके कि वे कम व्यापक रूप से समर्थित हैं (केवल एक प्लेटफॉर्म तक सीमित हो सकते हैं: numpy) और हो सकता है अन्य विशिष्ट सीमाएँ हैं। वे आम तौर पर एक आकर्षक लाभ प्रदान नहीं करते हैं।
एचडीएफ डेटाबेस के लिए एक अच्छा पूरक है, यह एक मोटे तौर पर मेमोरी-आकार के डेटासेट का उत्पादन करने के लिए एक क्वेरी चलाने और एचडीएफ में इसे कैश करने के लिए समझ सकता है यदि एक ही डेटा एक से अधिक बार उपयोग किया जाएगा। यदि आपके पास कोई डेटासेट है, जो निश्चित है, और आमतौर पर एक पूरे के रूप में संसाधित किया जाता है, तो इसे उचित आकार के HDF फ़ाइलों के संग्रह के रूप में संग्रहीत करना एक बुरा विकल्प नहीं है। यदि आपके पास एक डेटासेट है जिसे अक्सर अपडेट किया जाता है, तो इसमें से कुछ को एचडीएफ फ़ाइलों के रूप में समय-समय पर स्टेज करना अभी भी सहायक हो सकता है।
संक्षेप में, HDF डेटा के लिए एक अच्छा प्रारूप है जिसे आम तौर पर समग्र रूप से पढ़ा (या लिखा) जाता है; यह एक विस्तृत प्रारूप और अभिलेखीय प्रारूप के रूप में सभ्य, व्यापक समर्थन और अनुकूलता के कारण कई अनुप्रयोगों के लिए लिंगुआ फ्रेंका या आम / पसंदीदा इंटरचेंज प्रारूप है।
PS इसे कुछ व्यावहारिक संदर्भ देने के लिए, HDF को विकल्पों से तुलना करने का मेरा सबसे हालिया अनुभव, एक निश्चित छोटा (मेमोरी-आकार से बहुत कम) डेटासेट्स को HDF के रूप में पढ़ने के लिए 2 सेकंड का समय लगा (और इसमें से अधिकांश शायद पंडों का ओवरहेड है); ~ JSON से पढ़ने के लिए 1 मिनट; और डेटाबेस को लिखने के लिए 1 घंटा । निश्चित रूप से डेटाबेस लिखने के लिए किया जा सकता है, लेकिन आप बेहतर होगा एक अच्छा DBA! यह बॉक्स से बाहर काम करता है।
एक लाभ व्यापक समर्थन है - सी, जावा, पर्ल, पायथन, और आर सभी में एचडीएफ 5 बाइंडिंग है।
एक और लाभ गति है। मैंने इसे कभी भी बेंचमार्क नहीं देखा है, लेकिन एचडीएफ को SQL डेटाबेस से अधिक तेज़ माना जाता है।
मैं समझता हूं कि वैज्ञानिक डेटा और समय श्रृंखला डेटा - नेटवर्क मॉनिटरिंग, उपयोग ट्रैकिंग, आदि के दोनों बड़े सेट के साथ उपयोग किए जाने पर यह बहुत अच्छा है।
मुझे विश्वास नहीं है कि एचडीएफ फ़ाइलों के लिए एक आकार सीमा है (हालांकि ओएस सीमा अभी भी लागू होगी।
जोड़ने के लिए, विशेष रूप से उनके कागज ASDF ASDF की जाँच करें : खगोल विज्ञान के लिए एक नया डेटा प्रारूप ; एएसडीएफ एचडीएफ 5 पर सुधार करने की कोशिश करता है और पेपर एचडीएफ 5 प्रारूप के कुछ डाउनसाइड का वर्णन करता है।