एक ही डायरेक्टरी में बड़ी संख्या में फाइलसिस्टम


29

ठीक है, इतना बड़ा नहीं है, लेकिन मुझे कुछ ऐसा उपयोग करने की आवश्यकता है जहां 30kb के औसत आकार वाली लगभग 60,000 फाइलें एक ही निर्देशिका में संग्रहीत की जाती हैं (यह एक आवश्यकता है ताकि कम संख्या में फ़ाइलों की उप-निर्देशिकाओं में तोड़ न सकें)।

फ़ाइलों को बेतरतीब ढंग से एक्सेस किया जाएगा, लेकिन एक बार बनाए जाने के बाद एक ही फाइल सिस्टम पर कोई लिख नहीं होगा। मैं वर्तमान में Ext3 का उपयोग कर रहा हूं, लेकिन इसे बहुत धीमा पा रहा हूं। कोई सुझाव?


3
उन्हें एक निर्देशिका में क्यों होना चाहिए?
काइल ब्रान्ड

1
मैं मूल प्रश्न का उत्तर देने में भी दिलचस्पी रखता हूं, जिसे एक्सएफ़एस और एक्स 4 में पर्याप्त सुधार दिया गया है।

जवाबों:


15

आपको XFS पर विचार करना चाहिए। यह फाइलसिस्टम और निर्देशिका स्तर पर दोनों ही फाइलों की एक बड़ी संख्या का समर्थन करता है, और बी + ट्री डेटा संरचनाओं के कारण बड़ी संख्या में प्रविष्टियों के साथ भी प्रदर्शन अपेक्षाकृत सुसंगत रहता है।

बड़ी संख्या में कागज़ात और प्रकाशनों के लिए उनकी विकी पर एक पृष्ठ है जो डिज़ाइन को विस्तृत करता है। मेरा सुझाव है कि आप इसे एक कोशिश दें और अपने वर्तमान समाधान के खिलाफ बेंचमार्क करें।


स्लाइड्स के अनुसार @ nelaar के जवाब में, ext4 इस कार्य के लिए xfs से बेहतर होगा।
mulllhausen

13

लिनक्स पर एक बिलियन फाइलें

इस लेख के लेखक बड़ी फाइल की गणना के साथ फाइल सिस्टम पर कुछ प्रदर्शन मुद्दों में खोदते हैं और विभिन्न फाइल सिस्टम ext3, ext4 और XFS के प्रदर्शन की कुछ अच्छी तुलना करते हैं। इसे स्लाइड शो के रूप में उपलब्ध कराया गया है। http://events.linuxfoundation.org/slides/2010/linuxcon2010_wheeler.pdf

mkfs चलाने का समय 1M 50kb फाइल बनाने का समय फ़ाइल सिस्टम की मरम्मत का समय 1m फ़ाइलों को हटा रहा है


2
हम वास्तव में पसंद करते हैं कि उत्तर सामग्री में सामग्री के लिए संकेत नहीं होते हैं। जब भी यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, तो उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर होगा
user9517

@ मुझे उम्मीद है कि बेहतर होगा, जैसे कि बस पीडीएफ डाउनलोड करना, आपको वही जानकारी देगा।
nelaaro

19
वाह ये कुछ असाधारण रूप से रेखांकन पढ़ने में कठिन हैं। ~
थोरसुमोनर

8

Ext3 पर एक निर्देशिका में कई फाइलों पर बहन साइट stackoverflow.com पर लंबाई में चर्चा की गई है

मेरी राय में ext3 पर एक निर्देशिका में 60 000 फाइलें आदर्श से बहुत दूर हैं, लेकिन आपकी अन्य आवश्यकताओं के आधार पर यह काफी अच्छा हो सकता है।


5

ठीक है। मैंने ReiserFS, XFS, JFS, Ext3 (dir_hash enable) और Ext4dev (2.6.26 कर्नेल) का उपयोग करके कुछ प्रारंभिक परीक्षण किया। मेरी पहली धारणा यह थी कि सभी काफी तेज थे (मेरे मांसल वर्कस्टेशन पर) - यह पता चला है कि रिमोट उत्पादन मशीन में काफी धीमा प्रोसेसर है।

मैं ReiserFS के साथ कुछ अजीबता का अनुभव करता था यहां तक ​​कि प्रारंभिक परीक्षण पर भी ऐसा ही था। ऐसा लगता है कि JFS के पास अन्य सभी की तुलना में 33% कम CPU आवश्यकता है और इसलिए दूरस्थ सर्वर पर इसका परीक्षण करेगा। यदि यह काफी अच्छा प्रदर्शन करता है, तो मैं इसका उपयोग करूंगा।


5

मैं एक एप्लिकेशन लिख रहा हूं जो बहुत सारी और बहुत सारी फ़ाइलों को संग्रहीत करता है हालांकि मेरा बड़ा है और मेरे पास 10 मिलियन हैं जो मैं कई निर्देशिकाओं में विभाजित कर रहा हूं।

ext3 मुख्य रूप से डिफ़ॉल्ट "लिंक्ड सूची" कार्यान्वयन के कारण धीमा है। इसलिए यदि आपके पास एक डायरेक्टरी में बहुत सारी फाइलें हैं, तो इसका मतलब है कि दूसरा खोलना या बनाना धीमा और धीमा होने वाला है। कुछ ऐसा है जिसे htree इंडेक्स कहा जाता है जो ext3 के लिए उपलब्ध है जो कथित तौर पर चीजों में बहुत सुधार करता है। लेकिन, यह केवल फाइल सिस्टम निर्माण पर उपलब्ध है। यहां देखें: http://lonesysadmin.net/2007/08/17/use-dir_index-for-your-new-ext3-filesystems/

चूंकि आप वैसे भी फाइलसिस्टम का पुनर्निर्माण करने जा रहे हैं और एक्स 3 सीमाओं के कारण, मेरी सिफारिश है कि आप एक्सटी 4 (या एक्सएफएस) का उपयोग करके देखें। मुझे लगता है कि ext4 छोटी फाइलों के साथ थोड़ा तेज है और इसमें तेजी से पुनर्निर्माण है। जहाँ तक मुझे पता है Htree index ext4 पर डिफ़ॉल्ट है। मुझे वास्तव में JFS या Reiser के साथ कोई अनुभव नहीं है लेकिन मैंने सुना है कि लोग इससे पहले सलाह देते हैं।

वास्तव में, मैं शायद कई फाइल सिस्टम का परीक्षण करूँगा। क्यों नहीं ext4, xfs और jfs की कोशिश करें और देखें कि कौन सा सर्वश्रेष्ठ समग्र प्रदर्शन देता है?

कुछ ऐसा है जो एक डेवलपर ने मुझे बताया कि एप्लिकेशन कोड में चीजों को गति दे सकता है, एक "स्टेट + ओपन" कॉल नहीं करना है, बल्कि "ओपन + फॉस्ट" है। पहला दूसरे की तुलना में काफी धीमा है। यकीन नहीं होता अगर आपका उस पर कोई नियंत्रण या प्रभाव है।

स्टैकओवरफ़्लो पर मेरी पोस्ट यहाँ देखें। लिनक्स में 10 मिलियन फाइलों तक भंडारण और पहुंच, वहां कुछ बहुत उपयोगी उत्तर और लिंक हैं।


3

Dir_index को सक्षम करने के लिए tune2fs का उपयोग करने से मदद मिल सकती है। यह देखने के लिए कि क्या यह सक्षम है:

sudo tune2fs -l /dev/sda1 | grep dir_index

यदि यह सक्षम नहीं है:

sudo umount /dev/sda1   
sudo tune2fs -O dir_index /dev/sad1
sudo e2fsck -D /dev/sda1
sudo mount /dev/sda1

लेकिन मुझे लगता है कि आप गलत रास्ते पर जा रहे हैं ... क्यों नहीं एक फ्लैट इंडेक्स जेनरेट किया जाए और कुछ कोड का इस्तेमाल बेतरतीब ढंग से करने के लिए किया जाए। फिर आप एक अधिक अनुकूलित ट्री संरचना के लिए उप निर्देशिकाओं का उपयोग कर सकते हैं।


1
/dev/sad1जानबूझकर कॉपी / पास्ता त्रुटि को रोकने के लिए किया गया था ?
अनवर

2

ext3 और नीचे प्रति निर्देशिका 32768 फ़ाइलों का समर्थन करता है। ext4 फ़ाइलों की वास्तविक गणना में 65536 तक का समर्थन करता है, लेकिन आपको अधिक करने की अनुमति देगा (यह सिर्फ उन्हें निर्देशिका में संग्रहीत नहीं करेगा, जो अधिकांश उपयोगकर्ता उद्देश्यों के लिए कोई फर्क नहीं पड़ता)।

इसके अलावा, जिस तरह से निर्देशिकाओं को ext * filesystem पर संग्रहीत किया जाता है, वह अनिवार्य रूप से एक बड़ी सूची के रूप में है। अधिक आधुनिक फाइलसिस्टम (Reiser, XFS, JFS) पर उन्हें B- पेड़ों के रूप में संग्रहीत किया जाता है, जो बड़े सेटों के लिए अधिक कुशल होते हैं।


2
एक dir में फ़ाइलों की संख्या का समर्थन करना एक उचित गति से करने के समान नहीं है। मुझे अभी तक नहीं पता है कि ext4 कोई बेहतर है, लेकिन ext3 बहुत धीमा हो जाता है जब एक निर्देशिका में कुछ हजार से अधिक फाइलें होती हैं, यहां तक ​​कि dir_index चालू होने पर भी (यह मदद करता है, लेकिन समस्या को पूरी तरह से समाप्त नहीं करता है)।
कैस

1

आप फ़ाइल नाम के बजाय फ़ाइल इनकोड्स को संग्रहीत कर सकते हैं: इनकोड संख्याओं तक पहुंच बहुत तेज़ होनी चाहिए जो फ़ाइल नामों को हल कर रही हो


अब मुझे बताओ। आप एक फाइल को इनोड नंबर से कैसे खोलते हैं?
मैट

1
@ मैट, ऐसा लगता है कि मेरे जवाब देने के बाद सवाल बदल गया है। या मैं बहुत ज्यादा बेवकूफ था 1.5 साल पहले :)))
kolypto

0

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


-1

आपने इन फ़ाइलों में डेटा का प्रकार निर्दिष्ट नहीं किया है। लेकिन इसके ध्वनियों से, आपको त्वरित खोजों के लिए अनुक्रमण के साथ कुछ प्रकार के डेटाबेस का उपयोग करना चाहिए।


-1

फाइलसिस्टम शायद ऐसी आवश्यकता के लिए आदर्श भंडारण नहीं है। किसी तरह का डेटाबेस स्टोरेज बेहतर है। फिर भी यदि आप इसकी सहायता नहीं कर सकते हैं, तो कई निर्देशिकाओं में फ़ाइलों को विभाजित करने का प्रयास करें और एकल निर्देशिका पर उन निर्देशिकाओं को माउंट (बाइंड) करने के लिए Unionfs का उपयोग करें जहां आप सभी फ़ाइलों को प्रदर्शित करना चाहते हैं। मैंने इस तकनीक का उपयोग गति बढ़ाने के लिए बिल्कुल नहीं किया है, लेकिन यह एक कोशिश के काबिल है।

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