2011-01-17 19 views
8

पर 1 मिलियन छवि फ़ाइलों को स्थानांतरित करना मैं एक छवि साझा करने वाली वेबसाइट चलाता हूं जिसमें 1 मिलियन से अधिक छवियां (~ 150GB) हैं। मैं वर्तमान में अपने समर्पित सर्वर में हार्ड ड्राइव पर संग्रहीत कर रहा हूं, लेकिन मैं जल्दी से अंतरिक्ष से बाहर निकल रहा हूं, इसलिए मैं उन्हें अमेज़ॅन एस 3 में ले जाना चाहता हूं।अमेज़ॅन एस 3

मैंने एक आरएसवाईएनसी करने की कोशिश की है और यह सिर्फ एक दिन में आरएसवाईएनसी को स्कैन करने और छवि फ़ाइलों की सूची बनाने के लिए लिया है। स्थानांतरित करने के एक और दिन के बाद, यह केवल 7% पूर्ण था और मेरे सर्वर को क्रॉल में धीमा कर दिया था, इसलिए मुझे रद्द करना पड़ा।

क्या ऐसा करने का कोई बेहतर तरीका है, जैसे कि उन्हें किसी अन्य स्थानीय हार्ड ड्राइव पर GZIP और फिर उस फ़ाइल को स्थानांतरित/अनजिप करें?

मैं यह भी सोच रहा हूं कि इन फ़ाइलों को एकाधिक उपनिर्देशिका में स्टोर करना समझ में आता है या क्या यह एक ही निर्देशिका में सभी मिलियन + फाइलें ठीक है?

+3

यह प्रोग्रामिंग से संबंधित नहीं है। – Alan

+0

आप इसे रात में चला सकते हैं जब आपका सर्वर व्यस्त नहीं होता है। इसके अलावा "अच्छा" टूल भी है जो आपकी धीमी गति को कम कर सकता है। चूंकि rsync को डुप्लिकेट छोड़ने के लिए कॉन्फ़िगर किया जा सकता है, इसलिए अंततः गति में सुधार होगा। मैं निश्चित रूप से छवियों को उपनिर्देशिका में विभाजित कर दूंगा क्योंकि 100,000 फ़ाइलों को प्राप्त करने के बाद कई लिनक्स कमांड विफल होने लगते हैं। एक और मुद्दा, यदि आपके पास बहुत सारी फ़ाइलें हैं तो आप इनोड से बाहर हो सकते हैं। –

उत्तर

5
  1. यह देखते हुए कि फ़ाइलें (अभी तक) मौजूद नहीं है संतृप्त, उन्हें एक संग्रह फ़ाइल के रूप में भेजने के एक तुल्यकालन प्रोटोकॉल का उपयोग की तुलना में तेज किया जाना चाहिए के बारे में चिंता करने की जरूरत नहीं है।

  2. हालांकि, संग्रह को संपीड़ित करने से छवि फ़ाइलों के लिए अधिक (अगर बिल्कुल) मदद नहीं होगी, यह मानते हुए कि छवि फ़ाइलों को पहले ही संकुचित प्रारूप में जेपीईजी में संग्रहीत किया गया है।

  3. डेटा के 150 गीबाइट्स ट्रांसमिटिंग लंबे समय तक नेटवर्क बैंडविड्थ का उपभोग करने जा रहा है। यदि आप स्थानांतरण करने के लिए आरएसवाईएनसी के बजाय HTTP या FTP का उपयोग करने का प्रयास करते हैं तो यह वही होगा। यदि संभव हो तो ऑफ़लाइन स्थानांतरण बेहतर होगा; जैसे हार्ड डिस्क, या टेप या डीवीडी का एक सेट भेजना।

  4. एक लाख निर्देशिका को एक फ्लैट निर्देशिका में रखना एक प्रदर्शन परिप्रेक्ष्य से एक बुरा विचार है। जबकि कुछ फाइल सिस्टम O(logN) फ़ाइल नाम लुकअप के समय के साथ काफी अच्छी तरह से सामना करेंगे, अन्य O(N) फ़ाइल नाम के साथ नहीं हैं। निर्देशिका में सभी फ़ाइलों तक पहुंचने के लिए N से गुणा करें। एक अतिरिक्त समस्या यह है कि फ़ाइल नामों के क्रम में फ़ाइलों तक पहुंचने के लिए उपयोगिताएं महत्वपूर्ण रूप से धीमी हो सकती हैं यदि उन्हें दस लाख फ़ाइल नामों को सॉर्ट करने की आवश्यकता होती है। (यह आंशिक रूप से समझा सकता है कि rsync ने इंडेक्सिंग करने के लिए 1 दिन क्यों लिया।)

  5. अपनी सभी छवि फ़ाइलों को एक निर्देशिका में रखना एक प्रबंधन परिप्रेक्ष्य से एक बुरा विचार है; जैसे , बैकअप लेने सामान संग्रह, चारों ओर सामान चलती, कई डिस्क या फाइल सिस्टम के विस्तार, आदि के लिए

+0

क्या 1 एम फाइलों को 1,000 उप निर्देशिकाओं में विभाजित करना उचित होगा? वहां 1 से अधिक स्तर की फाइलें रखने का कोई कारण नहीं है? – makeee

+0

हां यह होगा। ऐसा करने के कई तरीके हैं, इस पर निर्भर करते हुए कि उन्हें किस प्रकार नामित किया गया है और व्यवस्थित किया गया है, आप उन्हें कैसे प्रबंधित करना चाहते हैं, आदि –

+1

यदि मैं फ़ाइलों को विभाजित करने जा रहा हूं, तो gzip को समझ में नहीं आता .. मैं डेटाबेस में प्रत्येक आइटम के माध्यम से बस लूप हो सकता है, फ़ाइल नाम ले लीजिए, फ़ाइल को S3 पर कॉपी करें, इसके फ़ाइल नाम को mysql autoincrement आईडी में बदलें। तो मैं सिर्फ अपनी आईडी के आधार पर फ़ाइलों को विभाजित कर सकता हूं (प्लस मुझे अब डीबी में फ़ाइल नाम कॉलम नहीं होना चाहिए)। यहां तक ​​कि अगर इसमें एक महीने लगते हैं, तो मैं कम से कम कुछ हिस्सा कर सकता हूं और एस 3 पर फ़ाइलों के लिए एस 3 से पढ़ना शुरू कर सकता हूं, और अंतरिक्ष को बचाने के लिए सर्वर पर पुरानी फाइलों को हटा सकता हूं। यह उचित लगता है? – makeee

4

नेटवर्क पर फ़ाइलों को स्थानांतरित करने के बजाय आप एक विकल्प का उपयोग कर सकते हैं, उन्हें हार्डड्राइव पर रखना और इसे अमेज़ॅन की import/export सेवा पर भेजना है। आप S3 पर अपने सर्वर का नेटवर्क कनेक्शन आदि

+0

दुर्भाग्य से यह कोई विकल्प नहीं है, क्योंकि मेरे पास ऐसा कुछ करने के लिए डेटा सेंटर तक आसानी से पहुंच नहीं है। – makeee

25

एक विकल्प एक आलसी फैशन में माइग्रेशन निष्पादित करने के लिए हो सकता है।

  • सभी नई छवियां अमेज़ॅन एस 3 पर जाती हैं।
  • अमेज़ॅन पर अभी तक छवियों के लिए कोई भी अनुरोध अमेज़ॅन एस 3 पर उस छवि का माइग्रेशन ट्रिगर नहीं करता है। (इसे कतारबद्ध करें)

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

+1

अच्छा सुझाव! – sdolgy

+2

मैंने हाल ही में इस दृष्टिकोण को लिया, जब मुझे 40 मिलियन छवियों को एस 3 में माइग्रेट करने की आवश्यकता थी। मैंने कोड को गिटूब पर इस्तेमाल किया है, उम्मीद है कि किसी और को यह उपयोगी लगेगा: https://github.com/mikery/s3cacher –

+0

मैं इस विचार का भी समर्थन करता हूं। सुरुचिपूर्ण। –