क्या ग्रिड्सएफएस उत्पादन के लिए काफी तेज और विश्वसनीय है?


86

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

Nginx द्वारा सेवा की गई GridFS के साथ बेंचमार्क इंगित करता है, कि यह nginx द्वारा सेवा की गई एक सामान्य फाइल सिस्टम के रूप में तेज़ नहीं है।

नग्नेक्स के साथ बेंचमार्क

क्या कोई बाहर है, जो पहले से ही उत्पादन के माहौल में ग्रिड्स का उपयोग करता है, या एक नई परियोजना के लिए इसका उपयोग करेगा?


1
भविष्य के खोजकर्ताओं के लिए मोंगोडब में चित्र संग्रहीत करने पर एक ब्लॉग पोस्ट, जो मेरे लिए एक समान इरादा था: menge.io/2015/03/24/storing-small-images-in-mongodb (GridFS की तुलना केवल बाइनरी के रूप में डॉक्स में करने के साथ। डेटा)

यदि आप MongoDB में बाइनरी डेटा स्टोर करना चाहते हैं, तो यह तय करने के लिए बहुत सारे ट्रेड-ऑफ हैं - देखें: alexmarquardt.com/2017/03/02/…-
अलेक्जेंडर मार्क्वार्ड

जवाबों:


118

मैं अपने एक सर्वर पर काम करने के लिए ग्रिडफ़ोर्स का उपयोग करता हूं जो कि माननीय ट्रैफ़िक आँकड़ों (प्रति दिन 25k आगंतुकों के आसपास) के साथ मूल्य-तुलना करने वाली वेबसाइट का हिस्सा है। सर्वर में बहुत अधिक रैम, 2gigs नहीं है, और यहां तक ​​कि सीपीयू वास्तव में तेज नहीं है (कोर 2 डुओ 1.8Ghz) लेकिन सर्वर में बहुत अधिक स्टोरेज स्पेस है: छापे 0 कॉन्फ़िगरेशन में 10Tb (sata)। सर्वर जो काम कर रहा है वह बहुत सरल है:

हमारी कीमत-तुलना करने वाले प्रत्येक उत्पाद में एक छवि होती है (हमारे उत्पाद db के अनुसार लगभग 10 मिलियन उत्पाद होते हैं), और सर्वर का काम छवि को डाउनलोड करना, उसका आकार बदलना, उसे ग्रिडफिश पर स्टोर करना और आगंतुकों के ब्राउज़र तक पहुंचाना है। .. अगर यह ग्रिड में मौजूद नहीं है ... या ... इसे विज़िटर ब्राउज़र में वितरित करें यदि यह ग्रिड में पहले से ही संग्रहीत है। तो, इसे 'पारंपरिक सीडीएन स्कीमा' कहा जा सकता है।

हमने इस सर्वर पर 4 मिलियन छवियों को संग्रहीत और संसाधित किया है क्योंकि यह ऊपर और चल रहा है। आकार और भंडार सामान एक साधारण php स्क्रिप्ट द्वारा किया जाता है ... लेकिन निश्चित रूप से, एक पायथन स्क्रिप्ट, या जावा जैसी कोई चीज़ तेज़ हो सकती है।

वर्तमान डेटा का आकार: 11.23 जी

वर्तमान भंडारण का आकार: 12.5 ग्राम

संकेत: 5

सूचकांक का आकार: 849.65 मी

विश्वसनीयता के बारे में: यह बहुत विश्वसनीय है। सर्वर लोड नहीं करता है, इंडेक्स का आकार ठीक है, क्वेरीज़ तेज़ हैं

गति के बारे में: निश्चित रूप से, क्या यह स्थानीय फ़ाइल संग्रहण के रूप में तेज़ नहीं है, हो सकता है कि 10% धीमा हो, लेकिन तेजी से वास्तविक समय में उपयोग किया जा सकता है जब छवि को संसाधित करने की आवश्यकता होती है, जो हमारे मामले में बहुत php पर निर्भर है। रखरखाव और विकास के समय को भी कम कर दिया गया है: एक एकल या कई छवियों को हटाना इतना सरल हो गया: बस एक साधारण डिलीट कमांड के साथ db को क्वेरी करें। एक और दिलचस्प बात: जब हमने अपने पुराने सर्वर को रीबूट किया, तो स्थानीय फ़ाइल स्टोरेज (हजारों फ़ोल्डरों में लाखों फाइलें), यह कभी-कभी घंटों तक लटका रहता है, क्योंकि सिस्टम एक फ़ाइल अखंडता जांच कर रहा था (यह वास्तव में घंटों ...)। हमें ग्रिडफ़स के साथ यह समस्या नहीं है, हमारी छवियां अब बड़े मोंगोडब चंक्स में संग्रहीत हैं (2 जीबी फाइलें)

इसलिए ... मेरे दिमाग में ... हां, उत्पादन के लिए इस्तेमाल किए जाने वाले ग्रिडएफ़ तेज़ और विश्वसनीय हैं।


9
मैं हैरान हूं कि कोई भी एक उत्पादन वेब साइट पर प्राथमिक भंडारण के रूप में छापे 0 का उपयोग करेगा। यहां तक ​​कि अच्छे बैकअप के साथ, बेहतर प्रदर्शन के लिए भुगतान करने के लिए भंडारण विफलता की संभावना बढ़ जाती है।
mikerobi

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

लेकिन आप सक्रिय रूप से विफलता की संभावना बढ़ा रहे हैं (प्रारंभिक ड्राइव विफलता कारक स्पिंडल की संख्या से गुणा)। अगर आप को पढ़ने की तुलना में अधिक लिखने की जरूरत है तो RAID 10 आदर्श होगा और अगर आपको लिखने की तुलना में अधिक रीड की जरूरत है तो 5/6 छापे।
न्यूरोस्क्रीप

9
@ManuEidenberger आप उन चित्रों को संग्रहीत करने के लिए ग्रिड का उपयोग क्यों कर रहे हैं, जो एक MongoDB दस्तावेज़ में संग्रहीत होंगे? मुझे लगता है कि आप 16 एमबी दस्तावेज़ आकार सीमा तक नहीं पहुंचे। और एक MongoDB दस्तावेज़ के भीतर BLOB के रूप में छवि को संग्रहीत करना अधिक कुशल होगा, क्योंकि आपको MongoDB दस्तावेज़ों के शीर्ष पर GridFS परत की आवश्यकता नहीं है।
अरनौद बुचेज़

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

12

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

अंत में, शार्पिंग के साथ, आप एक ऐसे बिंदु पर पहुंच सकते हैं, जहाँ ग्रिड्स भंडारण वास्तव में एक साधारण फाइल सिस्टम और एक नोड के विपरीत तेज विकल्प बन जाता है।


6

बड़े DBs की मरम्मत पर हेड-अप हालांकि - एक नई प्रणाली जिसे हम विकसित कर रहे हैं, मोंगो सफाई से बाहर नहीं निकली, और 7TB ग्रिड्स की मरम्मत करने से ऐसा लगता है कि यह 130 घंटे लगेगा।

इस वजह से, मुझे लगता है कि मैं ओपनस्टैक स्विफ्ट या सेफ पर स्विच करना चाहूंगा। फिर भी, तब तक अच्छा था। और नेगनेक्स-ग्रिडफ़्स मॉड्यूल मीठा है।


तो आप कैसे गए?
मुकुस

5

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


3
पेंट। अब उपलब्ध नहीं है, ऐसा लगता है। :(
मैरियन

2

जब तक आप नहीं जानते कि आप क्या कर रहे हैं, मैं ग्रिडफ़ोर्स का उपयोग करने की सलाह नहीं देता। GridFS सिर्फ अमूर्त परत है जो चंक्स के लिए फ़ाइलों को विभाजित करती है और फ़ाइलों को दो संग्रहों में संग्रहीत करती है। अधिक फाइलें - अधिक ओवरहेड। यदि आप उम्मीद करते हैं कि फ़ाइलें समान आकार की होंगी, तो 32M या उससे अधिक नहीं - आप सही तरीके से हैं। ग्रिडफ़्स पर बड़ी फ़ाइलों को संग्रहीत करने का प्रयास न करें। क्यों?

  1. विभिन्न भाषाओं के ड्राइवर पूरी फ़ाइल को पढ़ सकते हैं। (जैसे कि विखंडू) फ़ाइल के छोटे हिस्से को पढ़ते समय।
  2. फ़ाइल को संशोधित करना सभी विखंडनों को प्रभावित कर सकता है और डेटाबेस लोड को बढ़ा सकता है यदि आपकी फ़ाइल प्रणाली बड़ी हो रही है, तो आपको ग्रिडफ़िश को शार्प करने का निर्णय लेना होगा। सावधान रहे! जब तेज हो रहा है तो संगति की गारंटी नहीं है!

यदि आप पढ़े गए लोड किए गए प्रोजेक्ट के बारे में सोचते हैं - फ़ाइलों को सीधे डॉक्स में लोड करने पर विचार करें (यदि 16M या उससे कम आकार में) या किसी अन्य क्लस्टर का चयन करें, और फ़ाइल नाम / इनकोड को अपने तर्क से लिंक करें।

उम्मीद है की यह मदद करेगा।


4
मैं GridFS के लिए काफी नया हूं, हालांकि मैं जो समझता हूं कि GridFS सिर्फ एक अमूर्त परत से अधिक है जो फाइलों की संख्या को दोगुना करती है। GridFS MongoDB की प्रतिकृति और पैनापन सुविधाओं का लाभ लेने का एक सरल तरीका प्रदान करता है। मेरा मानना ​​है कि अन्य लोगों ने यह भी उल्लेख किया है कि फाइलें 2GB चंक्स में संग्रहित होती हैं, जो मुझे लगता है कि कुल फ़ाइलों की संख्या कम हो जाएगी, खासकर अगर किसी के पास बहुत बड़ी मात्रा में छोटी छवियां हैं।

+1 आप सही हैं। यहां तक ​​कि छोटी फाइलों को भी ग्रिड्सएफएस के साथ संग्रहित करने का लाभ नहीं होगा। यदि आपकी फ़ाइल एक MongoDB दस्तावेज़ (अर्थात इसकी 16 एमबी आकार की सीमा) में संग्रहीत की जा सकती है, तो आप फ़ाइल को एक MongoDB दस्तावेज़ में BLOB के रूप में संग्रहीत करेंगे। यह MongoDB स्टोरेज के ऊपर ग्रिड्स का उपयोग करने के ओवरहेड को पास करेगा। कंपोज़.आईओ
अरनौद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.