स्वीकार्य प्रदर्शन प्राप्त करते समय एक ext3 निर्देशिका में फ़ाइलों की अधिकतम संख्या?


25

मेरे पास एक ext3 निर्देशिका के लिए एक आवेदन पत्र है जो समय के साथ लगभग तीन मिलियन फ़ाइलों तक बढ़ गया है। कहने की जरूरत नहीं है कि इस डायरेक्टरी की फाइल लिस्टिंग पढ़ना असहनीय रूप से धीमा है।

मैं ext3 को दोष नहीं देता। उचित समाधान यह होता कि एप्लिकेशन कोड को ./a/b/c/abc.extकेवल उपयोग करने के बजाय उप-निर्देशिका में लिखने दें ./abc.ext

मैं ऐसी उप-निर्देशिका संरचना में बदल रहा हूं और मेरा सवाल बस यह है: मोटे तौर पर स्वीकार्य प्रदर्शन प्राप्त करते समय मुझे एक एक्स 3 निर्देशिका में कितनी फ़ाइलों को स्टोर करने की उम्मीद करनी चाहिए? आपका अनुभव क्या है?

या दूसरे शब्दों में; यह मानते हुए कि मुझे संरचना में तीन मिलियन फ़ाइलों को संग्रहीत करने की आवश्यकता है, संरचना कितनी गहरी होनी चाहिए ./a/b/c/abc.ext?

जाहिर है कि यह एक ऐसा सवाल है जिसका जवाब ठीक से नहीं दिया जा सकता, लेकिन मैं एक बॉल पार्क के अनुमान की तलाश कर रहा हूं।

जवाबों:


12

बशर्ते आपके पास एक डिस्ट्रो है जो dir_indexक्षमता का समर्थन करता है तो आप एक ही डायरेक्टरी में आसानी से 200,000 फाइलें रख सकते हैं। मैं इसे लगभग 25,000 पर रखूंगा, हालांकि, सुरक्षित होने के लिए। बिना dir_index, इसे 5,000 पर रखने की कोशिश करें।


10

Be बहुत सावधान कैसे आप निर्देशिका विभाजन का चयन करें। "ए / बी / सी" मेरे लिए आपदा के लिए एक नुस्खा की तरह लगता है ...

केवल नेत्रहीन रूप से कई निर्देशिकाओं की गहरी संरचना बनाते हुए न जाएं, पहले स्तर में 100 प्रविष्टियाँ, दूसरे स्तर में 100 प्रविष्टियाँ, तीसरे में 100 प्रविष्टियाँ कहें। मैं वहाँ गया था, किया गया था, जैकेट मिला और इसे पुनर्गठन करना पड़ा जब प्रदर्शन कुछ मिलियन फाइलों के साथ क्रैपर में चला गया। :-)

हमारे पास एक क्लाइंट है जो "कई निर्देशिकाएं" लेआउट करता था, और प्रति निर्देशिका केवल एक से पांच फाइलें डाल रहा था, और यह उन्हें मार रहा था। इस निर्देशिका संरचना में "डु" करने के लिए 3 से 6 घंटे। यहां के उद्धारकर्ता एसएसडी थे, वे अपने आवेदन के इस हिस्से को फिर से लिखने के लिए तैयार नहीं थे, और एक एसएसडी ने इस du समय को घंटों से मिनटों तक ले लिया।

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

प्रति निर्देशिका कितनी फ़ाइलों के बारे में आपके प्रश्न का उत्तर देने के लिए, 1,000 मैंने सुना है कि "इष्टतम" के बारे में बात की है, लेकिन 10,000 पर प्रदर्शन ठीक लग रहा है।

इसलिए, जो मैं सुझाऊंगा वह एक स्तर की निर्देशिकाओं का है, प्रत्येक स्तर पर एक निर्देशिका 2 वर्णों की है, जो ऊपरी और निचले अक्षरों और अंकों से बनी है, शीर्ष स्तर में लगभग 3800 निर्देशिकाओं के लिए है। फिर आप उन सब-डाइरेक्टरीज़ के साथ 14M फाइल्स रख सकते हैं जिनमें 3800 फाइल्स हों, या 3M फाइल्स के लिए सब-डायरेक्टरी प्रति 1,000 फाइल्स हों।

मैंने दूसरे क्लाइंट के लिए इस तरह का बदलाव किया है और इससे बहुत फर्क पड़ा है।


6

मेरा सुझाव है कि आप बेंचमार्किंग टूल जैसे पोस्टमार्क जैसे विभिन्न निर्देशिका आकारों का परीक्षण करने का प्रयास करें , क्योंकि कैश आकार (ओएस और डिस्क सबसिस्टम में) जैसे बहुत सारे चर हैं जो आपके विशेष वातावरण पर निर्भर करते हैं।

अंगूठे का मेरा व्यक्तिगत नियम <= 20k फ़ाइलों की निर्देशिका आकार के लिए लक्ष्य करना है, हालांकि मैंने 100k फ़ाइलों या निर्देशिका के साथ अपेक्षाकृत अच्छा प्रदर्शन देखा है।


3

मेरे पास सभी फ़ाइलें हैं जैसे फ़ोल्डर:

अपलोड / [तारीख] / [घंटा] /yo.png

और किसी भी प्रदर्शन की समस्या नहीं है।


4
और प्रति घंटे आपको कितनी फाइलें मिलती हैं?
कास्काबेल

2

http://en.wikipedia.org/wiki/Ext3#Functionality - यह उल्लेख करता है कि एक निर्देशिका में लगभग 32000 उपनिर्देशिकाएँ हो सकती हैं, लेकिन फ़ाइलों का कोई उल्लेख नहीं करता है।

http://roopindersingh.com/2008/05/10/ext3-handling-large-number-of-files-in-a-directory/

इसके अलावा, मैं विशेषज्ञों के आदान-प्रदान से नफरत करता हूं, लेकिन मैंने इस सवाल पर एक टिप्पणी पढ़ी कि यह प्रति निर्देशिका 10-15,000 से कम होना आदर्श है।


2

मैं एक बहुत ही शक्तिशाली सर्वर पर एक अच्छी लोड के तहत बहुत सारी मेमोरी के साथ पुष्टि कर सकता हूं कि 70,000 फाइलें हर तरह के कहर का कारण बन सकती हैं। मैं इसमें 70k फाइलों के साथ एक कैश फ़ोल्डर को हटाने के लिए गया था और यह नया उदाहरण शुरू करने के लिए अपाचे का कारण बनता है जब तक कि यह 255 पर अधिकतम नहीं हुआ और सिस्टम ने सभी मुफ्त मेमोरी का उपयोग किया (16 जीबी हालांकि वर्चुअल इंस्टेंस कम हो सकता है)। किसी भी तरह से, इसे 25,000 से कम रखना शायद एक बहुत ही विवेकपूर्ण कदम है


1

मेरे अनुभव में, सबसे अच्छा तरीका यह है कि फ़ाइल संरचना को पहले से इंजीनियर न करें। जैसा कि कम से कम एक अन्य उत्तर में बताया गया है, फाइलसिस्टम एक्सटेंशन हैं जो चीजों के प्रदर्शन-मुद्दे के अंत से निपटते हैं।

समस्या है कि मैं और अधिक मारा है प्रशासनिक अंत पर प्रयोज्य है। किसी निर्देशिका में फ़ाइलों की संख्या को कम करने के लिए आप कम से कम काम कर सकते हैं, संभवतः वह दृष्टिकोण है जिसकी आपको अभी आवश्यकता है।

sqrt (3_000_000) == 1732

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

अपने उदाहरण को देखते हुए यह होगा ./a/abc.ext, ./ab/abc.ext, ./abc/abc.ext, ...।

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


1

हम्म, मैंने हाल ही में इस लेख को पढ़ा । अनिवार्य रूप से आप अपने पसंदीदा हैशिंग एल्गोरिथ्म के वितरण का लाभ उठाते हैं। मैंने संख्याओं के साथ खेलना शुरू किया, एक MySQL हस्ताक्षरित INT का अधिकतम मूल्य 2147483647 है। आप अंतिम संख्या-की-उप-निर्देशिकाओं / फाइलों पर व्यवस्थित करने के लिए प्रति निर्देशिका की वांछित संख्या और उप-निर्देशिकाओं की संख्या में भिन्न हो सकते हैं- किसी दिए गए डेटा सेट के लिए प्रति-निर्देशिका विभाजन, लेकिन इष्टतम निर्देशिका / फ़ाइल संगठनों पर अनुभवजन्य साक्ष्य खोजना कठिन है। यह आलेख फाइलसिस्टम (कुछ दिलचस्प मेट्रिक्स) में प्रदर्शन अंतर के बारे में कुछ जानकारी देता है, लेकिन इष्टतम संगठनों के बारे में कुछ भी नहीं।


0

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

जब तक आपको दसियों अरबों फाइलों की जरूरत न हो, आप 1000 और 100,000 के बीच एक संख्या चुन सकते हैं और अच्छे परिणाम प्राप्त कर सकते हैं।

* 3 मिलियन का वर्गमूल।

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