मैं एक बड़ी संख्या में छोटे डेटासेट को एचडीएफ 5 फाइल में लिख रहा हूं, और परिणामी फाइलसाइज लगभग 10x है जो मैं डेटा के एक बेवकूफ सारणी से अपेक्षा करता हूं। मेरा डेटा श्रेणीबद्ध रूप से व्यवस्थित है निम्नानुसार:एचडीएफ 5 स्टोरेज ओवरहेड
group 0
-> subgroup 0
-> dataset (dimensions: 100 x 4, datatype: float)
-> dataset (dimensions: 100, datatype: float)
-> subgroup 1
-> dataset (dimensions: 100 x 4, datatype: float)
-> dataset (dimensions: 100, datatype: float)
...
group 1
...
प्रत्येक उपसमूह को 500 * 4 बाइट्स = 2000 बाइट्स लेना चाहिए, ओवरहेड को अनदेखा करना चाहिए। मैं डेटा के साथ किसी भी विशेषता को स्टोर नहीं करता हूं। फिर भी, परीक्षण में, मुझे लगता है कि प्रत्येक उपसमूह में लगभग 4 केबी लगते हैं, या लगभग दो बार मैं अपेक्षा करता हूं। मैं समझता हूं कि कुछ ओवरहेड है, लेकिन यह कहां से आ रहा है, और मैं इसे कैसे कम कर सकता हूं? क्या यह समूह संरचना का प्रतिनिधित्व करने में है?
अधिक जानकारी: यदि मैं प्रत्येक उपसमूह में दो डेटासेट के आयामों को 1000 x 4 और 1000 तक बढ़ाता हूं, तो प्रत्येक उपसमूह में फ्लैट 20,000 बाइट्स की अपेक्षा 22,250 बाइट्स लेते हैं। यह प्रति उपसमूह 2.2 केबी के उपरोक्त का तात्पर्य है, और छोटे डेटासेट आकारों के साथ मिलने वाले परिणामों के अनुरूप है। क्या इस ओवरहेड को कम करने का कोई तरीका है?
एचडीएफ 5 फ़ाइल प्रारूप [बेहद जटिल] है (http://www.hdfgroup.org/HDF5/doc/H5.format.html)। यह डेटा और मेटाडेटा ऑब्जेक्ट्स को स्टोर करने के लिए आंतरिक अवरोधन का उपयोग करता है। मेटाडेटा के लिए डिफ़ॉल्ट ब्लॉक आकार 2 कीबी है और प्रत्येक (उप-) समूह का अपना हेडर स्पेस है, जो लगभग 2000 बाइट्स के मनाए गए अंतर को बताता है। आप 'कॉम्पैक्ट' स्टोरेज के साथ कोशिश कर सकते हैं और प्रयोग कर सकते हैं - स्टोरेज रणनीतियों के बारे में अधिक जानकारी के लिए देखें (4.5) [यहां] (http://www.hdfgroup.org/HDF5/doc1.6/UG/10_Datasets.html)। –
मैंने जो संख्याएं ऊपर दी हैं वे 'कॉम्पैक्ट' सेट के साथ हैं। इससे सबक जटिल समूह संरचनाओं से बचने के लिए डेटा की थोड़ी मात्रा में आवास है। मेरे सभी डेटासेट को एक बड़े सरणी में जोड़ने और संपीड़न लगाने के बाद, मुझे 1: 1 पैकिंग अनुपात से बेहतर मिलता है (संपीड़न एचडीएफ 5 ओवरहेड जोड़ों की तुलना में अधिक जगह बचाता है)। – Thucydides411
@ Thucydides411 आपकी टिप्पणी सबसे अच्छा जवाब है! आपको इसे एक उत्तर में लिखना चाहिए और इसे स्वीकार करना चाहिए। – Simon