सभी फ़ाइलों को एक निर्देशिका में रखना संभव है, हालांकि कभी-कभी यह थोड़ा बड़ा हो सकता है। कई फाइल सिस्टम की एक सीमा होती है । आप USB स्टिक पर एक FAT32 स्वरूपित ड्राइव पर गिट रिपॉजिटरी लगाना चाहते हैं? आप केवल एकल निर्देशिका में 65,535 फ़ाइलों को संग्रहीत कर सकते हैं। इसका मतलब यह है कि निर्देशिका संरचना को वश में करना आवश्यक है ताकि किसी एक निर्देशिका को भरने की संभावना कम हो।
यह भी अन्य फ़ाइल सिस्टम और बड़े गिट रिपॉजिटरी के साथ एक समस्या बन जाएगा। एक अपेक्षाकृत छोटा गिट रेपो जिसे मैंने बाहर लटका दिया है (लगभग 360MiB) और इसमें 11k फ़ाइलों के लिए 181,546 ऑब्जेक्ट हैं। खींचेंलिनक्स रेपो और आपको 4,374,054 ऑब्जेक्ट मिले हैं। यदि आप इन सभी को एक निर्देशिका में रखते हैं, तो यह देखना असंभव होगा और फ़ाइल सिस्टम के लिए क्रैश ('क्रैश' के कुछ अर्थ के लिए) होगा।
इसलिए? आप इसे बाइट से विभाजित करते हैं। इसी तरह के दृष्टिकोण FireFox जैसे अनुप्रयोगों के साथ किए जाते हैं:
~/Li/Ca/Fi/Pr/7a/Cache $ ls
0/ 4/ 8/ C/ _CACHE_001_
1/ 5/ 9/ D/ _CACHE_002_
2/ 6/ A/ E/ _CACHE_003_
3/ 7/ B/ F/ _CACHE_MAP_
इसके अलावा, यह प्रदर्शन के सवाल पर भी जाता है। कई लंबे फ़ाइलनामों के साथ NTFS प्रदर्शन पर विचार करें :
Windows NT एक लंबे समय के लिए Windows NT फ़ाइल सिस्टम (NTFS) स्वरूपित ड्राइव पर निर्देशिका संचालन करने में एक लंबा समय लेता है जिसमें लंबी फ़ाइल नाम (8.3 सम्मेलन में अनुरूप नहीं होने वाले नाम) के साथ बड़ी संख्या में फाइलें होती हैं।
जब NTFS एक डायरेक्टरी में फाइलों को एन्यूमरेट करता है, तो उसे लंबे फाइल नामों से जुड़े 8.3 नामों को देखना पड़ता है। क्योंकि NTFS निर्देशिका को एक क्रमबद्ध अवस्था में बनाए रखा जाता है, इसी प्रकार लंबी फ़ाइल नाम और 8.3 नाम आमतौर पर निर्देशिका लिस्टिंग में एक दूसरे के बगल में नहीं होते हैं। तो, एनटीएफएस हर फाइल के लिए निर्देशिका की रैखिक खोज का उपयोग करता है। नतीजतन, निर्देशिका लिस्टिंग करने के लिए आवश्यक समय की मात्रा निर्देशिका में फ़ाइलों की संख्या के वर्ग के साथ बढ़ जाती है। फाइलों की छोटी संख्या (कुछ सौ से कम) के लिए समय की देरी नगण्य है। लेकिन जैसा कि एक निर्देशिका में फ़ाइलों की संख्या कई हजार तक बढ़ जाती है, लिस्टिंग करने के लिए आवश्यक समय मिनट, घंटे या दिन भी बढ़ सकता है। यदि लंबे फ़ाइल नाम बहुत समान हैं - केवल कुछ अंतिम वर्णों में भिन्न होने पर समस्या बढ़ जाती है।
SHA1 चेकसम के नाम वाली फाइलों के साथ, यह आपदा और घृणित प्रदर्शन के लिए एक नुस्खा हो सकता है।
जबकि ऊपर Windows NT 3.5 (और NTFS 1.2 - आमतौर पर 1995 से 2000 के दशक तक उपयोग किया जाता है) से एक तकनीकी नोट से है, यह EXT3 जैसी चीजों में भी देखा जा सकता है , जिसमें फाइल सिस्टम के कार्यान्वयन के साथ O (n) लुकअप की आवश्यकता है। । और उस बी-ट्री परिवर्तन के साथ भी:
जबकि HTree एल्गोरिथ्म ने लुकअप समय में काफी सुधार किया, यह वर्कलोड के लिए कुछ प्रदर्शन प्रतिगमन का कारण बन सकता है जो एक बड़ी निर्देशिका में सभी फाइलों के कुछ ऑपरेशन को करने के लिए रीडडीर () का उपयोग करता है।
...
इस प्रदर्शन के मुद्दे को कम करने के लिए एक संभावित समाधान, जो डैनियल फिलिप्स और एंड्रियास दिलगर द्वारा सुझाया गया है, लेकिन अभी तक लागू नहीं किया गया है, जिसमें कर्नेल को फ्री इनोड चुनना शामिल है, जिनके इनोड नंबर एक संपत्ति को पूरा करते हैं जो इनोड्स को उनके फ़ाइलनाम हैश द्वारा समूहबद्ध करते हैं। डैनियल और एंड्रियास, डायरेक्टरी के आकार के आधार पर इनोड्स की एक सीमा से इनोड को आवंटित करने का सुझाव देते हैं, और फिर फ़ाइल नाम हैश के आधार पर उस रेंज से एक फ्री इनोड का चयन करते हैं। यह सिद्धांत में होना चाहिए कि पठन क्रम में निर्देशिका में संदर्भित आयतों का उपयोग करते समय थ्रेशिंग की मात्रा कम हो जाती है। हालांकि यह स्पष्ट नहीं है कि इस रणनीति के परिणामस्वरूप गति आएगी; वास्तव में यह इनोड ब्लॉक की कुल संख्या को बढ़ा सकता है जिसे संदर्भित करना पड़ सकता है, और इस तरह रीडडीर () + स्टेट () वर्कलोड का प्रदर्शन बदतर हो सकता है। स्पष्ट रूप से,
संयोग से, 2005 से प्रदर्शन में सुधार करने के लिए इस बिट, उसी वर्ष गिट जारी किया गया था।
जैसा कि फ़ायरफ़ॉक्स और कई अन्य अनुप्रयोगों के साथ देखा गया है जिसमें बहुत सारी हैश कैश्ड फाइलें हैं, जो बाइट द्वारा कैश को विभाजित करने का डिज़ाइन है। इसमें नगण्य प्रदर्शन लागत होती है, और जब पुराने के साथ थोड़ा सा हो सकता है, सिस्टम के साथ क्रॉस प्लेटफॉर्म का उपयोग किया जाता है, तो कार्यक्रम के काम करने या न करने के बीच का अंतर बहुत अच्छा हो सकता है।