2009-07-14 26 views
14

मेरे पास एक एचडीएफ 5 फ़ाइल है जिसमें यौगिक तत्वों के एक-आयामी (एन एक्स 1) डेटासेट हैं - वास्तव में यह एक समय श्रृंखला है। डेटा को पहले एचएफडी 5 फ़ाइल में ऑफ़लाइन एकत्रित किया जाता है, और उसके बाद विश्लेषण किया जाता है। विश्लेषण के दौरान अधिकांश डेटा अनिच्छुक हो जाते हैं, और इसके कुछ हिस्सों में दिलचस्प हैं। चूंकि डेटासेट काफी बड़ा हो सकता है, इसलिए दिलचस्प लोगों को रखते हुए, मैं अनिच्छुक तत्वों से छुटकारा पाना चाहता हूं। उदाहरण के लिए, 500-तत्व डेटासेट के तत्व 0-100 और 200-300 और 350-400 रखें, बाकी को डंप करें। पर कैसे?एचडीएफ 5 फ़ाइल से डेटा को हटाने

क्या किसी को यह अनुभव है कि एचडीएफ 5 के साथ इसे कैसे पूरा किया जाए? स्पष्ट रूप से यह कई तरीकों से किया जा सकता है, कम से कम:

  • (स्पष्ट समाधान), एक नई ताजा फ़ाइल बनाएं और तत्व द्वारा तत्व, आवश्यक डेटा लिखें। फिर पुरानी फाइल को हटा दें।
  • या, पुरानी फ़ाइल में, एक नया ताजा डेटासेट बनाएं, आवश्यक डेटा लिखें, H5Gunlink() का उपयोग करके पुराने डेटासेट को अनलिंक करें, और h5repack के माध्यम से फ़ाइल चलाकर अनधिकृत खाली स्थान से छुटकारा पाएं।
  • या, प्रारंभिक दिशा में मौजूदा डेटासेट के भीतर दिलचस्प तत्वों को स्थानांतरित करें (उदाहरण के लिए 200-300 पदों को 101-3 और तत्व 350-400 पदों को 202-252 पर ले जाएं)। फिर डेटासेट के आकार को कम करने के लिए H5Dset_extent() को कॉल करें। फिर हो सकता है कि मुक्त स्थान जारी करने के लिए h5repack के माध्यम से चलाएं।

चूंकि अनचाहे तत्व हटा दिए जाने के बावजूद फ़ाइलें काफी बड़ी हो सकती हैं, इसलिए मैं उन्हें फिर से लिखना नहीं चाहूंगा (इसमें काफी समय लगेगा), लेकिन ऐसा लगता है कि वास्तव में खाली स्थान जारी करना आवश्यक है । एचडीएफ 5 विशेषज्ञों से कोई संकेत?

उत्तर

8

एचडीएफ 5 (कम से कम संस्करण जिसका उपयोग मैं 1.6.9) कर रहा हूं, हटाने की अनुमति नहीं देता है। असल में, यह करता है, लेकिन यह उपयोग की गई जगह को मुक्त नहीं करता है, जिसके परिणामस्वरूप आपके पास अभी भी एक बड़ी फ़ाइल है। जैसा कि आपने कहा था, आप h5repack का उपयोग कर सकते हैं, लेकिन यह समय और संसाधनों की बर्बादी है।

कुछ ऐसा जो आप कर सकते हैं वह एक पार्श्व डेटासेट है जिसमें बूलियन वैल्यू है, जो आपको बताता है कि कौन से मान "जीवित" हैं और कौन से हटा दिए गए हैं। यह फ़ाइल को छोटा नहीं बनाता है, लेकिन कम से कम यह आपको हटाने के लिए एक तेज़ तरीका देता है।

एक विकल्प है कि आप अपने सरणी पर एक स्लैब को परिभाषित करें, प्रासंगिक डेटा कॉपी करें, फिर पुराने सरणी को हटाएं, या हमेशा स्लैब के माध्यम से डेटा तक पहुंचें, और उसके बाद इसे फिर से परिभाषित करें (मैंने इसे कभी नहीं किया है, हालांकि, मुझे यकीन नहीं है कि यह संभव है, लेकिन यह होना चाहिए)

अंत में, आप अपने रूटसेट hdf5 फ़ाइल पर "संलग्न" एचडीएफ 5 फ़ाइल में अपने डेटासेट रखने के लिए hdf5 बढ़ते रणनीति का उपयोग कर सकते हैं। जब आप सामान को हटाना चाहते हैं, तो रोचक डेटा को किसी अन्य घुड़सवार फ़ाइल में कॉपी करें, पुरानी फ़ाइल को अनमाउंट करें और इसे हटा दें, फिर नई फ़ाइल को उचित स्थान पर पुनर्स्थापित करें। यह समाधान गन्दा हो सकता है (क्योंकि आपके पास कई फाइलें हैं) लेकिन यह आपको रिक्त स्थान का उपयोग करने के बजाय अंतरिक्ष को खाली करने और केवल अपने डेटा पेड़ के उप-भाग पर संचालित करने की अनुमति देती है।

+0

आपके विचारों के लिए धन्यवाद। यह वास्तव में कई तरीकों से किया जा सकता है। उम्मीद है कि वास्तविक विलोपन क्षमताओं को किसी दिन एचडीएफ 5 में जोड़ा जाएगा, इस तरह के आसपास गड़बड़ करने के लिए सामान को हटाने के लिए लगभग हास्यास्पद है ... लेकिन अन्यथा, यह एक अच्छा फ़ाइल प्रारूप है :-) –

+1

हटाना और पैकिंग आसान नहीं है। एचडीएफ 5 एक फाइल सिस्टम की तरह है। यहां तक ​​कि यदि आप ब्लॉक को मुक्त करते हैं, तो उन्हें हटाए जाने के रूप में चिह्नित करते हुए, "लाइव" होने पर फ़ाइल पैक करना कठिन होता है और प्रदर्शन बाधा होती है। आप MacOSX पर एन्क्रिप्टेड फाइल सिस्टम के साथ एक ही समस्या का सामना करते हैं, इसलिए मेरा अनुमान है कि मैं भविष्य में किसी भी समय एचडीएफ 5 स्तर पर आपकी समस्या का समाधान नहीं करूंगा। –

+0

सच है, यह निश्चित रूप से आसान नहीं है, और शायद एचडीएफ 5 डेवलपर्स के लिए प्राथमिक रुचि नहीं है। लेकिन यह निश्चित रूप से संभव होगा - अधिकांश डेटाबेस इसे कर सकते हैं, मुझे लगता है। –

1

डेटा की प्रतिलिपि बनाकर या h5repack का उपयोग करके आपने वर्णन किया है कि दुर्भाग्य से एचडीएफ 5 फ़ाइल में डेटा को 'सिकुड़ने' के दो सामान्य तरीके हैं।

समस्या, जैसा कि आपने अनुमान लगाया है, यह है कि एक एचडीएफ 5 फ़ाइल में एक जटिल आंतरिक संरचना है (फाइल प्रारूप here है, जो उत्सुक है), इसलिए चीजों को हटाने और घटाने से एक समान आकार में छेद छोड़ देता है फ़ाइल। एचडीएफ 5 लाइब्रेरी के हाल के संस्करण मुक्त स्थान को ट्रैक कर सकते हैं और इसका पुनः उपयोग कर सकते हैं, लेकिन आपका उपयोग केस इसका लाभ लेने में सक्षम नहीं लगता है।

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

एच 5 गुनलिंक() को रास्ते से हटा दिया गया है। H5Ldelete() पसंदीदा प्रतिस्थापन है।

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