मैं लिनक्स वेब सर्वर पर 1,000,000+ छोटी gziped फ़ाइलों को सबसे कुशलता से कैसे संग्रहीत और सेवा कर सकता हूं?


10

मेरे पास बड़ी स्थिर सामग्री है जिसे मुझे लिनक्स-आधारित वेबसर्वर के माध्यम से वितरित करना है। यह एक मिलियन से अधिक छोटी, gzip फ़ाइलों का एक सेट है। 90% फाइलें 1K से कम हैं और शेष फाइलें अधिकतम 50K हैं। भविष्य में, यह 10 मिलियन से अधिक gzip फ़ाइलों तक बढ़ सकता है।

क्या मुझे इस सामग्री को एक फ़ाइल संरचना में रखना चाहिए या क्या मुझे इस सभी सामग्री को डेटाबेस में रखने पर विचार करना चाहिए? यदि यह एक फ़ाइल संरचना में है, तो क्या मैं बड़ी निर्देशिकाओं का उपयोग कर सकता हूं या क्या मुझे छोटी निर्देशिकाओं पर विचार करना चाहिए?

मुझे बताया गया था कि डिलीवरी के लिए एक फाइल संरचना तेज होगी, लेकिन दूसरी तरफ, मुझे पता है कि डिस्क पर फाइलें बहुत अधिक जगह ले लेंगी, क्योंकि फाइलें ब्लॉक 1K से अधिक होंगी।

डिलीवरी प्रदर्शन के बारे में सबसे अच्छी रणनीति क्या है?

अपडेट करें

अभिलेखों के लिए, मैंने विंडोज 7 के तहत एक परीक्षण किया है, जिसमें आधी मिलियन फाइलें हैं:

यहाँ छवि विवरण दर्ज करें

जवाबों:


6

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

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


5

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


4

मुझे लगता है कि यहां सही उत्तर इस बात पर निर्भर करता है कि फाइलों को कैसे अनुक्रमित किया जाएगा ... यह निर्धारित करता है कि जब किसी दिए गए फ़ाइल को डिलीवरी के लिए चुना जाता है।

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

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

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


1

आधुनिक फाइल सिस्टम के साथ यह बहुत समस्या नहीं होनी चाहिए। मैंने एक ही निर्देशिका में 1 बिलियन फ़ाइलों के साथ XFS का परीक्षण किया है, और मुझे पूरा यकीन है कि ext4 ठीक भी करेगा (जब तक कि फाइलसिस्टम स्वयं बहुत बड़ा नहीं है)। निर्देशिका प्रविष्टियों को कैश करने के लिए पर्याप्त मेमोरी है; बड़ा प्रोसेसर कैश भी बहुत मदद करेगा।


2
EXT फ़ाइल सिस्टम एक ही dir में उच्च फ़ाइल गणना के साथ बहुत अच्छी तरह से मुकाबला नहीं कर रहा है; विशेष रूप से डिफ़ॉल्ट Directory_index सेटिंग्स के साथ नहीं। एक ही dir में इतनी उच्च फ़ाइल गणना के साथ XFS का परीक्षण नहीं किया है, लेकिन मुझे पूरा यकीन है कि EXT उसी dir में 1 बिलियन के करीब कुछ भी काम नहीं करेगा।
हरिवू jarपोलर

1
मैंने सुना है कि reiserfs छोटी फ़ाइलों के लिए अच्छा है, लेकिन फिर मैंने उस आदमी को भी सुना जो सॉफ्टवेयर को बनाए रखता है, जेल में है (!), इसलिए reiserfs का निकट भविष्य बहुत अनिश्चित है। मैं व्यक्तिगत रूप से EXT4 के लिए जाऊंगा, और XFS दूसरी पसंद के रूप में। बड़ी फ़ाइलों के लिए XFS सबसे अच्छा नहीं है?
deडे

यह हुआ करता था, लेकिन यदि आप एक ताजा कर्नेल (3.0 और उच्चतर) चला रहे हैं तो यह छोटी फाइलों के लिए भी ठीक काम करता है।
वज़ोक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.