जो लाखों छोटी फ़ाइलों के लिए आकार को अवरुद्ध करता है


10

मैं डेबियन व्हीज़ी पर 2x 4TB डिस्क को हार्डवेयर RAID1 (यह एक LSI MegaRaid हो सकता है)। भौतिक ब्लॉक का आकार 4kB है। मैं 150-200 मिलियन छोटी फाइलें (3 और 10kB के बीच) स्टोर करने जा रहा हूं। मैं प्रदर्शन के लिए नहीं कह रहा हूं, लेकिन भंडारण को बचाने के लिए सर्वश्रेष्ठ फाइल सिस्टम और ब्लॉक आकारों के लिए। मैंने 4k के ब्लॉक साइज के साथ ext4 पर 8200 बाइट की फाइल कॉपी की है। यह डिस्क की 32kB लिया !? क्या इसकी वजह जर्नलिंग है? तो ऐसी छोटी फ़ाइलों के लिए सबसे अधिक स्टोरेज को बचाने के लिए क्या विकल्प हैं?


जवाबों:


1

यदि मैं उस स्थिति में था, तो मैं एक ऐसे डेटाबेस को देखूंगा जो अलग-अलग फ़ाइलों के बजाय कॉम्पैक्ट, ऑफ़सेट-आधारित इंडेक्स के साथ एक ही फ़ाइल में सभी डेटा संग्रहीत कर सकता है। हो सकता है कि एक डेटाबेस जिसमें एक FUSE ड्राइवर उपलब्ध हो, जो जब आवश्यक हो, फाइलों के रूप में उसके साथ बातचीत करने के लिए उपलब्ध हो, तो वास्तव में सभी अलग-अलग फ़ाइलों को रखने के बिना।

वैकल्पिक रूप से, आप यह कह सकते हैं कि, फ़ाइल के आकार का 60 वां - 70 वां प्रतिशत, और डिस्क पर अलग-अलग ब्लॉक के बजाय फाइलसिस्टम ट्री नोड्स में सीधे फाइल करने की कोशिश करें। प्रत्येक नोड में 10k स्टोर करना शायद एक बड़ा सवाल है, लेकिन अगर आप वहां 60% -70% फाइलें प्राप्त कर सकते हैं, तो यह बहुत बड़ी जीत होगी।

केवल कुछ फाइल सिस्टम ही ऐसा कर सकते हैं (reiserfs एक है), और मुझे लगता है कि यह सब इस बात पर निर्भर करता है कि प्रतिशत कितना है, क्या यह पेड़ में फिट होगा। आप इसे धुन सकते हैं। मुझे लगता है कि बाकी को एक ब्लॉक में फिट करने की कोशिश।

और पत्रिकाओं के बारे में चिंता मत करो; उनके पास वैसे भी ऊपरी आकार की सीमा है।


4
नो नो नो नो नो नो नो नो नो जस्ट नो ... नो टू योर फर्स्ट पैराग्राफ। मैंने यह गलती वर्षों पहले की थी और बाद में इसे पूर्ववत किया जाना था। मुझे विरासत में मिला सिस्टम भी है जो इस डिज़ाइन पैटर्न का उपयोग करता है। फ़ाइलें फ़ाइल सिस्टम में, या एक समझौता के रूप में, SQL सर्वर FileStream ऑब्जेक्ट में होती हैं यदि आपको उन्हें संयोजित करना चाहिए (इसलिए शायद आपका FUSE ड्राइवर, लेकिन अभी भी नहीं)। फाइलसिस्टम में काम करते समय अन्य विचार हैं, जैसे कि 4 मिलियन फाइलों को एक फ़ोल्डर में नहीं रखना (मैंने वह गलती भी की है)।
मार्क हेंडरसन

2
@MarkHenderson लेकिन समस्या यह परिभाषित कर रही है कि एक फाइल क्या होनी चाहिए, और एक रिकॉर्ड क्या होना चाहिए। किसी भी अधिक विवरण प्रदान किए बिना, लाखों छोटी-छोटी चीजें मेरे लिए रिकॉर्ड की तरह बहुत अधिक ध्वनि करती हैं। सिर्फ इसलिए कि उनके पास वर्तमान में फाइलें हैं, इसका मतलब यह नहीं है कि उन्हें उस तरह से बने रहने की जरूरत है, या कभी उस तरह से होना चाहिए। इसके अलावा, मैंने नौकरी के लिए SQL सर्वर का उपयोग करते हुए एक दूसरे के लिए कभी सुझाव नहीं दिया;)

2
5 साल पहले मुझे सिंगल फोल्डर में 1 मिलियन फाइल्स और हर दिन लगभग 10,000 नए 1-4KB फाइल्स के साथ एक सिस्टम विरासत में मिला। मैंने उन सभी को एक ISAM तालिका में फेंकने का फैसला किया क्योंकि "अरे, वे विश्लेषण के लिए सिर्फ सादा पाठ हैं!" और फिर यह एक बहुत बड़ी गलती हो गई क्योंकि मेरे पास अब एक एकल 12GB टेबल थी जिसमें स्क्वीलियन पंक्तियां थीं जो कि संसाधित होने के बाद ज्यादातर कुछ नहीं कर रही थीं। इसलिए मैंने फ़ाइल नाम के GUID के आधार पर उन्हें हीराचियल फ़ोल्डरों के साथ फाइलसिस्टम में रखने के लिए वापस स्विच किया।
मार्क हेंडरसन

(एक चक्रीय पंक्तियों के साथ एक एकल 12 जीबी टेबल एक समस्या क्यों थी यह अलग बात है कि मैं यहां नहीं पहुंचूंगा)
मार्क हेंडरसन

2
@MarkHenderson: यह एक अलग समस्या नहीं है, कि आपने यह क्यों कहा कि यह गलत समाधान था ("... बहुत बड़ी गलती क्योंकि मेरे पास अब एक एकल 12GB टेबल थी जिसमें स्क्वीलियन पंक्तियाँ थीं ....")। आप गलत डेटाबेस इंजन / टेबल प्रारूप का चयन करते हैं, लेकिन एक INDEX के साथ बहुत सारी छोटी चीजों को एक ही फाइल में डालने की अवधारणा ध्वनि है, इसलिए जब तक आप इसे सही नहीं करते हैं। आप जो चाहते हैं, वह एक ऐसा डेटाबेस है जो ऑटो-शेडिंग के साथ लाखों छोटी वस्तुओं के लिए कुंजी / मूल्य स्टोर पर एक्सेल करता है। यह भी ध्यान दें कि वह विशेष रूप से प्रदर्शन के बारे में परवाह नहीं कर रहा है, बस स्थान।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.