NTFS प्रदर्शन और फ़ाइलों और निर्देशिकाओं की बड़ी मात्रा


183

NTFS के साथ विंडोज कैसे बड़ी मात्रा में फाइलों और निर्देशिकाओं के साथ प्रदर्शन करता है?

क्या आप प्रदर्शन समस्याओं या अन्य समस्याओं में चलाने से पहले फ़ाइलों या निर्देशिकाओं की सीमा के आसपास कोई मार्गदर्शन कर सकते हैं?

जैसे कि इसके अंदर 100,000 फोल्डर के साथ एक फ़ोल्डर है एक ठीक बात है?



संबंधित प्रश्न के उत्तर यहां स्वीकृत उत्तर से हीन हैं।
एरिक जे।

: इस कार्यान्वयन उपयोगी हो सकता है github.com/acrobit/AcroFS
Ghominejad

जवाबों:


271

यहां किसी ऐसे व्यक्ति से सलाह ली जाती है, जहां हमारे पास लाखों फ़ाइलों वाली फ़ोल्डर हैं।

  1. एक फ़ोल्डर इंडेक्स जानकारी (चाइल्ड फाइल्स और चाइल्ड फोल्डर के लिंक) को एक इंडेक्स फाइल में स्टोर करता है। जब आपके पास बहुत सारे बच्चे होंगे तो यह फ़ाइल बहुत बड़ी हो जाएगी। ध्यान दें कि यह एक बच्चे के बीच अंतर नहीं है जो एक फ़ोल्डर और एक बच्चा है जो एक फ़ाइल है। फर्क सिर्फ इतना है कि बच्चे की सामग्री या तो बच्चे का फ़ोल्डर इंडेक्स है या बच्चे का फाइल डेटा। नोट: मैं इसे कुछ हद तक सरल कर रहा हूं, लेकिन यह इस बिंदु को पार करता है।
  2. इंडेक्स फ़ाइल खंडित हो जाएगी। जब यह बहुत अधिक खंडित हो जाता है, तो आप उस फ़ोल्डर में फ़ाइलों को जोड़ने में असमर्थ होंगे। इसका कारण यह है कि अनुमति के # टुकड़ों की सीमा है। यह डिजाइन द्वारा है। मैंने एक समर्थन घटना कॉल में Microsoft के साथ इसकी पुष्टि की है। इसलिए यद्यपि आपके पास एक फ़ोल्डर में हो सकने वाली फ़ाइलों की संख्या के लिए सैद्धांतिक सीमा कई अरबों की है, अच्छी किस्मत जब आप दसियों लाख फाइलें मारना शुरू करते हैं क्योंकि आप पहले विखंडन सीमा को मार देंगे।
  3. हालांकि यह सब बुरा नहीं है। आप उपकरण का उपयोग कर सकते हैं: contig.exe इस इंडेक्स को डीफ़्रैग्मेन्ट करने के का । यह सूचकांक के आकार को कम नहीं करेगा (जो कि दसियों मिलियन फाइलों तक कई जिग्स तक पहुंच सकता है) लेकिन आप टुकड़ों के # कम कर सकते हैं। नोट: डिस्क डीफ़्रैग्मेंट टूल फ़ोल्डर के इंडेक्स को डीफ़्रैग नहीं करेगा। यह फ़ाइल डेटा को डीफ़्रैग कर देगा। केवल contig.exe उपकरण सूचकांक को डीफ़्रैग्मेंट करेगा। FYI करें: आप किसी व्यक्तिगत फ़ाइल के डेटा को डीफ़्रैग करने के लिए भी उपयोग कर सकते हैं।
  4. यदि आप डीफ़्रेग करते हैं, तब तक प्रतीक्षा न करें जब तक कि आप अधिकतम # खंड सीमा से न टकराएं। मेरे पास एक फ़ोल्डर है जहां मैं डीफ़्रैग नहीं कर सकता क्योंकि मैंने बहुत देर होने तक इंतजार किया है। मेरा अगला परीक्षण उस फ़ोल्डर से कुछ फ़ाइलों को किसी अन्य फ़ोल्डर में स्थानांतरित करने का प्रयास करना है, यह देखने के लिए कि क्या मैं इसे डीफ़्रैग कर सकता हूं। यदि यह विफल रहता है, तो मुझे जो करना है वह है 1) एक नया फ़ोल्डर बनाएं। 2) नए फ़ोल्डर में फ़ाइलों का एक बैच स्थानांतरित करें। 3) नए फ़ोल्डर को डीफ़्रैग करें। ऐसा होने तक # 2 और # 3 दोहराएं और फिर 4) पुराने फ़ोल्डर को हटा दें और पुराने से मिलान करने के लिए नए फ़ोल्डर का नाम बदलें।

अपने प्रश्न का अधिक सीधे उत्तर देने के लिए: यदि आप 100K प्रविष्टियों को देख रहे हैं, तो कोई चिंता नहीं है। अपने आप को खटखटाओ। यदि आप लाखों प्रविष्टियों को देख रहे हैं, तो या तो:

a) उन्हें उप-फ़ोल्डरों में उप-विभाजित करने की योजना बनाएं (उदाहरण के लिए, आपके पास 100M फ़ाइलें हैं। यह उन्हें 1000 फ़ोल्डरों में संग्रहीत करने के लिए बेहतर है, ताकि आपके पास प्रति फ़ोल्डर में 100,000 फाइलें केवल 1 बड़े फ़ोल्डर में संग्रहीत करने की तुलना में हों। " एक एकल बड़े के बजाय 1000 फ़ोल्डर सूचकांकों का निर्माण करेगा, जो कि अधिकतम # खंड सीमा के हिट होने की संभावना है

ख) अपने बड़े फ़ोल्डर के सूचकांक को डीफ़्रैग्मेन्ट रखने के लिए नियमित रूप से contig.exe चलाने की योजना बनाएं।

यदि आप ऊब चुके हैं तो केवल नीचे पढ़ें।

वास्तविक सीमा खंड के # पर नहीं है, लेकिन डेटा खंड के रिकॉर्ड की संख्या पर है जो पॉइंटर्स को टुकड़े में संग्रहीत करता है।

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


5
मुझे contig.exeइसके बारे में और जानकारी कहां मिल सकती है , यह मेरे सर्वर पर नहीं है। Google खोज ने इस तकनीकी पृष्ठ को लौटा दिया जिसमें उपनिर्देशिका या फ़ोल्डर इंडेक्स डीफ़्रेग्मेंटेशन का कोई उल्लेख नहीं है।
इवान कैरोल

35
मुझे Microsoft इंजीनियर के साथ एक तकनीकी कॉल से कॉन्टेग और फोल्डर इंडेक्स विखंडन के बारे में पता चला। यह तकनीक के समर्थन की बेकार परतों 1-3 परतों के माध्यम से जा रहा बट में एक बड़ा दर्द था। (उह ... क्या आपने chkdsk चलाने की कोशिश की है? क्या आप विंडोज एक्सप्लोरर में फ़ोल्डर खोलने की कोशिश कर सकते हैं? क्या आप फ़ोल्डर अनुमतियों की जांच कर सकते हैं?) मैं यहाँ 7 दिनों के लिए बैठने के लिए अपने लानत chkdsk के लिए लाखों फ़ाइलों के साथ एक ड्राइव स्कैन करने के लिए नहीं जा रहा हूँ !!
MrB

5
@ ss2k - बस contig.exeएक निर्देशिका की ओर इशारा करता हूं, मुझे लगता है कि वह काम करेगा: contig -a .देता है:C:\temp\viele-Dateien is in 411 fragments Summary: Number of files processed : 1 Average fragmentation : 411 frags/file
Lumi

3
@Ghilo मैं लाखों फ़ाइलों का उपयोग करते समय SSD पर प्रदर्शन में गिरावट की पुष्टि कर सकता हूं। मैं अच्छी तरह से फ़ोल्डर को डीफ़्रैग करने की कोशिश करता था, लेकिन contig ने इसके लिए कुछ भी नहीं किया। इसने ऐसा कार्य किया जैसे कि यह पूरा हो गया लेकिन इसे चलाने से पहले और बाद में समान विखंडन दिखाया।
ब्रैम वेनरो

1
इंडेक्स को डिफ्रैग करने के लिए कोंटिग को चलाने के संदर्भ में, क्या मुझे c:\my\big\directoryया c:\my\big\directory\*, या पर कॉन्टेग चलाना चाहिए $mft? (या कुछ और?)
स्टीफन आर

47

शॉर्ट फाइल नेम क्रिएट करने वाली चीजों के प्रदर्शन की समस्याएं भी हैं। यदि आप एक फ़ोल्डर [1] में 300k से अधिक फ़ाइलें हैं, तो Microsoft लघु फ़ाइल नाम बनाना बंद करने की अनुशंसा करता है। पहले 6 अक्षर जितने कम अनूठे हैं, यह समस्या उतनी ही अधिक है।

[1] कैसे NTFS http://technet.microsoft.com से काम करता है , "300,000" की खोज करें


3
मैं यहां एक उद्धरण If you use large numbers of files in an NTFS folder (300,000 or more), disable short-file name generation for better performance, and especially if the first six characters of the long file names are similar.जोड़ूंगा - "300,000" संकेत की खोज को। BTW: "300" टाइप करना पर्याप्त होगा (यहाँ क्लिपबोर्डिंग की कोई आवश्यकता नहीं है)
वुल्फ

32

मैं 2 बिलियन (2 ^ 32) फ़ाइलों तक होस्ट करने के लिए एक फ़ाइल-संरचना का निर्माण कर रहा हूं और निम्नलिखित परीक्षणों का प्रदर्शन किया है जो एक सॉलिड स्टेट ड्राइव पर एनटीएफएस डायरेक्टरी प्रति एनटीएफएस डायरेक्टरी में लगभग 250 फाइलों या 120 डाइरेक्टरी पर एक तेज गिरावट दिखाते हैं। एसएसडी):

  • फ़ाइल प्रदर्शन 250 और 1000 फ़ाइलों के बीच 50% तक गिर जाता है।
  • निर्देशिका प्रदर्शन 120 और 1000 निर्देशिकाओं के बीच 60% तक गिर जाता है।
  • संख्या> 1000 के लिए मूल्य अपेक्षाकृत स्थिर रहते हैं

दिलचस्प बात यह है कि निर्देशिकाओं और फ़ाइलों की संख्या में महत्वपूर्ण हस्तक्षेप नहीं होता है।

तो सबक हैं:

  • 250 से ऊपर फ़ाइल नंबर 2 का एक कारक लागत
  • 120 से ऊपर के डिरेक्टरी में 2.5 का एक फैक्टर खर्च होता है
  • विंडोज 7 में फाइल-एक्सप्लोरर बड़े #Files या #Dirs को संभाल सकता है, लेकिन उपयोगिता अभी भी खराब है।
  • उप-निर्देशिकाएँ पेश करना महंगा नहीं है

यह डेटा (प्रत्येक फ़ाइल और निर्देशिका के लिए 2 माप) है:

(FOPS = File Operations per Second)
(DOPS = Directory Operations per Second)

#Files  lg(#)   FOPS    FOPS2   DOPS    DOPS2
   10   1.00    16692   16692   16421   16312
  100   2.00    16425   15943   15738   16031
  120   2.08    15716   16024   15878   16122
  130   2.11    15883   16124   14328   14347
  160   2.20    15978   16184   11325   11128
  200   2.30    16364   16052   9866    9678
  210   2.32    16143   15977   9348    9547
  220   2.34    16290   15909   9094    9038
  230   2.36    16048   15930   9010    9094
  240   2.38    15096   15725   8654    9143
  250   2.40    15453   15548   8872    8472
  260   2.41    14454   15053   8577    8720
  300   2.48    12565   13245   8368    8361
  400   2.60    11159   11462   7671    7574
  500   2.70    10536   10560   7149    7331
 1000   3.00    9092    9509    6569    6693
 2000   3.30    8797    8810    6375    6292
10000   4.00    8084    8228    6210    6194
20000   4.30    8049    8343    5536    6100
50000   4.70    7468    7607    5364    5365

और यह टेस्ट कोड है:

[TestCase(50000, false, Result = 50000)]
[TestCase(50000, true, Result = 50000)]
public static int TestDirPerformance(int numFilesInDir, bool testDirs) {
    var files = new List<string>();
    var dir = Path.GetTempPath() + "\\Sub\\" + Guid.NewGuid() + "\\";
    Directory.CreateDirectory(dir);
    Console.WriteLine("prepare...");
    const string FILE_NAME = "\\file.txt";
    for (int i = 0; i < numFilesInDir; i++) {
        string filename = dir + Guid.NewGuid();
        if (testDirs) {
            var dirName = filename + "D";
            Directory.CreateDirectory(dirName);
            using (File.Create(dirName + FILE_NAME)) { }
        } else {
            using (File.Create(filename)) { }
        }
        files.Add(filename);
    }
    //Adding 1000 Directories didn't change File Performance
    /*for (int i = 0; i < 1000; i++) {
        string filename = dir + Guid.NewGuid();
        Directory.CreateDirectory(filename + "D");
    }*/
    Console.WriteLine("measure...");
    var r = new Random();
    var sw = new Stopwatch();
    sw.Start();
    int len = 0;
    int count = 0;
    while (sw.ElapsedMilliseconds < 5000) {
        string filename = files[r.Next(files.Count)];
        string text = File.ReadAllText(testDirs ? filename + "D" + FILE_NAME : filename);
        len += text.Length;
        count++;
    }
    Console.WriteLine("{0} File Ops/sec ", count / 5);
    return numFilesInDir; 
}

2
आपको 2 ^ 8 फ़ाइलों के बाद प्रदर्शन हानि दिखाई देती है क्योंकि आपको लघु नाम पीढ़ी (8 वर्ण नाम पीढ़ी) को अक्षम करने की आवश्यकता होती है। देखें Technet.microsoft.com/en-us/library/cc781134(v=ws.10).aspx
काइल फाल्कनर

1
नमस्ते, मैंने कोशिश की कि इस कमांड लाइन का उपयोग कर: fsutil.exe व्यवहार सेट अक्षम 8dot3 1 एक रिबूट के बाद परिणाम बड़े पैमाने पर 10000 से कम फ़ाइलों / dirs के लिए समान थे। लेख कहता है कि यह केवल उच्च संख्या के लिए महत्वपूर्ण है। हालांकि मैंने जो देखा वह एक सामान्य सिद्ध था। संभवतः मेरे SSD पर लोड लोड फैक्टर के कारण गिरावट (यह 45% के बजाय अब 80% पूर्ण है)
Spoc

बहुत उपयोगी है, धन्यवाद। अन्य उपयोगकर्ताओं द्वारा कहा गया लाखों का अनुमान इस संख्यात्मक मूल्यों से बहुत दूर है।
एड्रियन मायरे

2
8.3 नाम पीढ़ी को अक्षम करने के बाद भी, आपको अभी भी मौजूदा 8.3 नामों को हटाने की आवश्यकता है , या मौजूदा फ़ाइलों की गणना में थोड़ा सुधार होगा।
स्टीफन आर


15

100,000 ठीक होना चाहिए।

मेरे पास (anecdotally) देखा है कि लोगों को कई लाखों फ़ाइलों के साथ समस्या हो रही है और मुझे एक्सप्लोरर के साथ खुद को समस्याएँ हैं बस एक सुराग नहीं है कि पिछली 60-हजार हजार फाइलों को कैसे गिनें, लेकिन NTFS आपके द्वारा बात कर रहे संस्करणों के लिए अच्छा होना चाहिए।

यदि आप सोच रहे हैं, तो तकनीकी (और मुझे उम्मीद है कि सैद्धांतिक ) अधिकतम संख्या है: 4,294,967,295


5
असिंचित के लिए, वह बड़ी संख्या (2 ^ 32 - 1) फाइलें हैं।
मीटस्पेस

8

स्थानीय पहुंच के लिए, निर्देशिकाओं / फ़ाइलों की बड़ी संख्या एक मुद्दा नहीं लगती है। हालाँकि, यदि आप इसे किसी नेटवर्क पर एक्सेस कर रहे हैं, तो कुछ सौ के बाद ध्यान देने योग्य प्रदर्शन होता है (विशेषकर जब विस्टा मशीनों से एक्सेस किया जाता है (XP से विंडोज सर्वर w / NTFS उस संबंध में बहुत तेजी से चलने लगता है)।


4
क्या आप सुनिश्चित हैं कि यह NTFS (सर्वर पर डिस्क प्रोटोकॉल), और एसएमबी (नेटवर्क स्तर) नहीं है?
15

नहीं, मैंने इस कारण को कम करने के लिए कोई और शोध नहीं किया है। मेरे पास केवल वही जानकारी है जो ऊपर दी गई है।
ब्रायन नोब्लुक सिप

2

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

केवल-पढ़ने के लिए परिदृश्य मैं बड़ी संख्या में प्रविष्टियों के साथ निर्देशिकाओं के प्रदर्शन में गिरावट के लिए किसी भी कारण की कल्पना नहीं कर सकता।


1

मुझे एक ऑनलाइन लाइब्रेरी की कॉपी करते हुए एक निर्देशिका में NTFS पर लगभग 100 000 फ़ाइलों (प्रत्येक कई एमबी) के साथ वास्तविक अनुभव था।

एक्सप्लोरर या 7-ज़िप के साथ निर्देशिका को खोलने में लगभग 15 मिनट लगते हैं।

राइटिंग साइट कॉपी साथ winhttrack हमेशा कुछ समय के बाद अटक जाएगा। यह निर्देशिका के साथ भी निपटा, जिसमें लगभग 1 000 000 फाइलें हैं। मुझे लगता है कि सबसे बुरी बात यह है कि एमएफटी केवल क्रमिक रूप से फंस सकता है।

Ext2fsd के तहत ext3 पर समान खोलने से लगभग समान समय मिलता है। शायद reiserfs (reiser4fs नहीं) में जाने से मदद मिल सकती है।

इस स्थिति से बचने की कोशिश करना शायद सबसे अच्छा है।

ब्लॉब्स w / o का उपयोग करके अपने स्वयं के कार्यक्रमों के लिए कोई भी एफएस फायदेमंद हो सकता है। जिस तरह से फेसबुक फोटो को स्टोर करने के लिए करता है।


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