एप्लिकेशन के लिए सर्वश्रेष्ठ फ़ोल्डर कॉन्फ़िगरेशन जो लगभग 1 मिलियन फ़ाइलों और ulimit समस्याओं को खोलता है


1

मेरे पास एक एप्लिकेशन है जो 16 ^ 5 फाइलें (1048576) बनाता है। मैं इसे सभी को एक ही फ़ोल्डर में बनाने के लिए कॉन्फ़िगर कर सकता हूं या उन्हें जो भी मैं चाहता हूं, उन्हें अलग कर सकता हूं (प्रत्येक फ़ोल्डर पर 1, 2, 3 या 4 सबफ़ोल्डर होने पर)। उदाहरण:

/*

या

/a/*
.
.
.
/f/*

या

/a/a/*
/a/b/*
.
.
.
/f/f/*

या

/a/a/a/*
.
.
.
/f/f/f/*

या

/a/a/a/a/*
/a/a/a/b/*
.
.
.
/f/f/f/f/*

सभी फाइलों में 4KB से कम है। मैं इसे स्टोर करने के लिए Ubuntu 12.10 64bits और एक ext4 विभाजन का उपयोग कर रहा हूं। क्या फ़ोल्डर संरचना इस मामले के लिए सबसे अच्छी संरचना होगी? शायद अन्य फाइलसिस्टम इस मामले के लिए सबसे उपयुक्त होगा, कोई विचार?

वैसे भी मैं इस एल्गोरिथ्म को चलाने की कोशिश कर रहा हूं, मुझे 9999999 फाइलें खोलने में सक्षम होना चाहिए:

user@pc$ ulimit
unlimited

user@pc$ cat /proc/sys/fs/file-max
9999999

user@pc$ cat /etc/sysctl.conf
fs.file-max = 9999999

हालाँकि, जब मैं इसे एक सिंगल फोल्डर में सब कुछ बचाकर चलाता हूं, तो फोपेन कॉल लगभग 999999 फाइलों में विफल हो जाती है:

user@pc$ ls database/ | wc -l
999958

अजीब रूप से यह 999999 सिस्टम फ़ाइलों में फ़ाइल-मैक्स के लिए मेरा पिछला मूल्य था। मैंने निश्चित रूप से मूल्य को अपडेट करने से पहले अपनी मशीन को रिबूट किया है, शायद यह बहुत बड़ा है और फिर यह अंतिम रखता है। क्या गलत हो सकता है?


जिसे कि मेरे सवाल पसंद नहीं आया, तो टिप्पणी कृपया मैं इसे ठीक कर सकते हैं
Frederico Schardong

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

विभाजित करने की कोशिश करें ताकि आपके पास प्रति निर्देशिका 10 ^ 4-10 ^ 5 से अधिक फाइलें न हों। छोटी फ़ाइलों के लिए reiserfs का उपयोग करें।
урослав Рахматуллин

जवाबों:


1

यदि आप खरीद (5) को देखते हैं , /proc/sys/fs/file-max"सभी प्रक्रियाओं के लिए खुली फाइलों की संख्या पर एक प्रणाली-व्यापी सीमा को परिभाषित करता है"। विशेष रूप से, यह नहीं कहता है कि एक एकल प्रक्रिया कई फाइलें खोल सकती है।

आप sysconf (3) को संदर्भित करना चाह सकते हैं , जो OPEN_MAX"किसी भी समय किसी प्रक्रिया को खोलने वाली फ़ाइलों की अधिकतम संख्या" के रूप में वर्णन करता है। आप इस मान को चलाकर प्राप्त कर सकते हैं getconf OPEN_MAX

मैं वास्तव में यह नहीं जानता कि आप कितना बड़ा बना सकते हैं OPEN_MAX, और मैं इस घंटे की जांच करने के लिए इच्छुक नहीं हूं, लेकिन प्रयोग करने और हमारे बारे में रिपोर्ट करने के लिए स्वतंत्र महसूस कर रहा हूं।

संयोग से, मैं ulimit -aसभी सीमाओं को दिखाने के लिए भी दौड़ूंगा। तात्पर्य ulimitअकेले चलाना , जो केवल शेल और उसके बच्चों द्वारा लिखी गई फ़ाइलों के अधिकतम आकार को दर्शाता है।bashulimit -f

पुनश्च यदि आपके आवेदन को एक ही समय में एक लाख फाइलें खोलने की आवश्यकता है, तो मैं आपके डिजाइन का पुनर्मूल्यांकन करने का सुझाव दूंगा।


हां मैं इसे बदलने जा रहा हूं, आपके उत्तर के लिए धन्यवाद।
फ्रेडरिक स्कार्डॉन्ग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.