2013-01-15 14 views
6

मैं एक बड़ी संख्या में छोटे डेटासेट को एचडीएफ 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 केबी के उपरोक्त का तात्पर्य है, और छोटे डेटासेट आकारों के साथ मिलने वाले परिणामों के अनुरूप है। क्या इस ओवरहेड को कम करने का कोई तरीका है?

+3

एचडीएफ 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)। –

+2

मैंने जो संख्याएं ऊपर दी हैं वे 'कॉम्पैक्ट' सेट के साथ हैं। इससे सबक जटिल समूह संरचनाओं से बचने के लिए डेटा की थोड़ी मात्रा में आवास है। मेरे सभी डेटासेट को एक बड़े सरणी में जोड़ने और संपीड़न लगाने के बाद, मुझे 1: 1 पैकिंग अनुपात से बेहतर मिलता है (संपीड़न एचडीएफ 5 ओवरहेड जोड़ों की तुलना में अधिक जगह बचाता है)। – Thucydides411

+0

@ Thucydides411 आपकी टिप्पणी सबसे अच्छा जवाब है! आपको इसे एक उत्तर में लिखना चाहिए और इसे स्वीकार करना चाहिए। – Simon

उत्तर

4

मैं अपने स्वयं के प्रश्न का उत्तर दूंगा। समूह संरचना का प्रतिनिधित्व करने में शामिल ओवरहेड पर्याप्त है कि छोटे एरे स्टोर करने या कई समूहों के लिए यह समझ में नहीं आता है, प्रत्येक में केवल थोड़ी मात्रा में डेटा होता है। प्रति समूह ओवरहेड को कम करने का कोई तरीका नहीं प्रतीत होता है, जिसे मैंने लगभग 2.2 केबी पर मापा था।

मैंने प्रत्येक उपसमूह में दो डेटासेट को एक (100 x 5) डेटासेट में संयोजित करके इस समस्या का समाधान किया। फिर, मैंने उपसमूहों को हटा दिया, और प्रत्येक समूह में सभी डेटासेट को 3 डी डेटासेट में जोड़ा। इस प्रकार, अगर मेरे पास पहले पूर्व उप समूह थे, तो अब मेरे पास प्रत्येक समूह में आकार (एन x 100 x 5) के साथ एक डेटासेट है। मैं इस प्रकार एन * 2.2 केबी ओवरहेड को बचाता हूं जो पहले मौजूद था। इसके अलावा, चूंकि एचडीएफ 5 का अंतर्निर्मित संपीड़न बड़े सरणी के साथ अधिक प्रभावी है, इसलिए अब मुझे 1: 1 समग्र पैकिंग अनुपात से बेहतर मिलता है, जबकि पहले, ओवरहेड फ़ाइल के आधे स्थान लेते थे, और संपीड़न पूरी तरह से अप्रभावी था।

पाठ एचडीएफ 5 फाइलों में जटिल समूह संरचनाओं से बचने के लिए है, और प्रत्येक डेटासेट में जितना संभव हो उतना डेटा गठबंधन करने का प्रयास करना है।

+1

हाँ ... और नहीं। एचडीएफ 5 वैज्ञानिकों द्वारा बड़े पैमाने पर डेटासेट स्टोर करने के लिए बनाया गया था। मुझे लगता है कि 2 केबी से अधिक जुनून बिंदु को याद करना है। यदि आप इतनी जगह बाधित हैं तो यह शायद आपके लिए गलत पुस्तकालय है। डाटा को यथासंभव स्वयं वर्णन करने की कोशिश करते समय हमेशा मूल्यवान होता है, भले ही ऐसा करने के लिए कुछ Kb लेते हैं। आप 'चालाक' डेटा संरचनाएं बना सकते हैं, जैसे आप 'चालाक' कोड लिख सकते हैं, लेकिन मूर का कानून उन लोगों के पक्ष में है जो रखरखाव कोड लिखते हैं और स्वयं डेटा संरचनाओं का वर्णन करते हैं। –

+0

मुझे लगता है कि मैं अपने जवाब में इस पर चला गया। यदि आप बड़ी संख्या में छोटे डेटासेट संग्रहीत कर रहे हैं तो 2kb प्रति डेटासेट निश्चित रूप से चिंता का विषय है। मेरा जवाब, ऊपर, यदि संभव हो तो डेटा को बड़े डेटासेट में पैक करना है। मैंने एक जटिल संरचना का प्रस्ताव नहीं दिया: एक 3 डी डेटासेट, जहां प्रत्येक धुरी का अर्थ है, बहुत आसान है। – Thucydides411

संबंधित मुद्दे