2012-01-25 14 views
9

मेरा प्रश्न डिस्क पर या डीबी में छवियों को संग्रहीत करने के बारे में नहीं है।गैलरी के लिए छवियों को संग्रहीत करने के लिए सबसे अच्छा अभ्यास क्या है?

  • छवियाँ डिस्क पर संग्रहीत किया जाएगा
  • छवि पथ और अन्य छवि डेटा डेटाबेस में सहेजा जाएगा।
  • छवियाँ वहाँ कई कई उपयोगकर्ताओं

मेरे सवालों द्वारा इस्तेमाल किया छवियों हो सकता है एक अद्वितीय फ़ाइल नाम

  • छवियाँ 3 आकारों
  • में संग्रहीत किया जाएगा दिया जाएगा समय में कर रहे हैं:
    - चित्र होना चाहिए एक फ़ोल्डर, या कई फ़ोल्डर्स में संग्रहीत?
    - क्या अद्वितीय आईडी बनाने के लिए एमडी 5 का उपयोग करना ठीक है? जैसे md5 (id + filename + random_num)
    - क्या छवियों को सर्वर या क्लाइंट ब्राउज़र/कंप्यूटर पर कैश किया जाना चाहिए?

    मुझे और कुछ भी सोचना चाहिए?

    समाधान php, apache और mysql का उपयोग कर रहा है। हम छवियों को अपलोड करने के लिए अपलोडिफ़ी का उपयोग करते हैं।

    कुछ कोड का उपयोग मैं आज

    /** 
        * Calculate dir tree for object 
        * Folders starts from 00 to FF (HEX) and can have just as 
        * many subfolders (I think :) 
        * @param $id - User ID 
        * @param $type - Image category 
        * @return string 
        */ 
        function calculateDirTree($id, $type) 
        { 
         $hashUserID = substr(hash('md5', $id), -4); 
         $parentFolder = substr($hashUserID,0,2); 
         $subfolder = substr($hashUserID,2);  
         $basePath  = $type."/".$parentFolder.'/'.$subfolder.'/'; 
    
         return $basePath; 
        } 
    
  • +0

    आप अनुमान लगाते हैं कि आपके पास कितनी छवियां होंगी? सैकड़ों ? हजारों? लाखों ? –

    +0

    अगले कुछ वर्षों के लिए मैं लगभग 100k - 200k छवियों का अनुमान लगाता हूं। – Steven

    +0

    क्या आप उसी फ़ाइल नाम का उपयोग करेंगे जैसे उपयोगकर्ता ने अपलोड किया है, फिर यदि आप एक ही फ़ोल्डर में स्टोर करते हैं तो एक छवि हो सकती है, यदि आपके पास पहले से अपलोड की गई छवि के समान फ़ाइल नाम हो। –

    उत्तर

    3

    क्या छवियों को एक फ़ोल्डर, या कई फ़ोल्डर्स में संग्रहीत किया जाना चाहिए?

    आप "100k - 200k छवियों" के बारे में बात कर रहे हैं, इसलिए कई फ़ोल्डर्स होना चाहिए। अधिकतम करने की कोशिश करो। फ़ोल्डर में ~ 1000 छवियों।

    क्या अद्वितीय आईडी बनाने के लिए md5 का उपयोग करना ठीक है? जैसे एमडी 5 (आईडी + फाइलनाम + random_num)

    हाँ, आप यह कर सकते हैं। यह लंबे फ़ाइल नामों के साथ समस्याओं से बच जाएगा।

    क्या छवियों को सर्वर या क्लाइंट ब्राउज़र/कंप्यूटर पर कैश किया जाना चाहिए?

    ग्राहक पक्ष पर कैश किया जाना चाहिए। इतनी सारी छवियों के साथ समस्या यह है कि यह उच्च यातायात बनाता है। ग्राहक पर कैशिंग इसे कम करने में मदद करते हैं।

    0

    कैशिंग के बारे में, यह सबसे अच्छा होगा दोनों सिरों पर यह कैश करने के लिए, कि जिस तरह से नए चित्र जल्दी से प्राप्त किए गए हैं, और उन मौजूदा छवियों पर जाकर यह कैश की गई है।

    मुझे एक या एकाधिक फ़ोल्डर्स में संग्रहीत करने के संबंध में किसी भी फाइल सिस्टम सीमा के बारे में पता नहीं है।

    0

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

    मेरे पिछले सलाह अगर आप छवियों के टन है SHA256 एन्क्रिप्शन एल्गोरिथ्म टक्कर

    3

    रोकने आप को संभालने के लिए, मैं दृढ़ता से कई फ़ोल्डरों का प्रयोग करने का सुझाव देते हैं चाहते छवियों की संख्या पर निर्भर करता है के लिए बेहतर है। फ़ोल्डर संरचना बनाने के लिए फ़ाइल नाम के पहले अक्षर का उपयोग करना सबसे आसान तरीका होना चाहिए।

    less than 1000 images --> one folder 
    less than 20000 images --> one level of folders (a, b, c, ...) 
    more     --> several levels (a containing aa, ab, b containing ba, bb, ...) 
    

    YMMV

    +0

    मैंने अपने परीक्षण में उपयोग की गई फ़ाइल संरचना को जोड़ा है। मैं विचार कर रहा हूं कि मुझे इससे चिपकना चाहिए या नहीं। – Steven

    0

    definetely फाइल सिस्टम के लिए जाना:: मुझे लगता है, संख्या कुछ इस तरह कर रहे हैं यह अधिक performant है और फ़ाइलों को संग्रहीत करने के लिए बेहतर है (कि क्या के लिए किया जाता है) फिट बैठता है। बड़ी छवियों को सहेजने/पुनर्प्राप्त करते समय एसक्यूएल धीमा हो सकता है। आप प्रत्येक उपयोगकर्ता (फ़ोल्डर नाम के रूप में आईडी का उपयोग करके) के लिए एक फ़ोल्डर बना सकते हैं और जब फ़ाइल सिस्टम पर कोई छवि सहेजी जाती है तो आप उपयोगकर्ता छवि तालिका पर संदर्भ सहेज सकते हैं (उपयोगकर्ता के खिलाफ फ़ाइल नाम को एसक्यूएल पर सहेजकर)। आप यह सुनिश्चित कर सकते हैं कि प्रत्येक छवि को इसे सहेजते समय इसे नामित करके एक अनन्य फ़ाइल नाम प्राप्त हो, आप मूल फ़ाइल नाम के संयोजन को वास्तविक दिनांक समय (MD5 का उपयोग करने की आवश्यकता नहीं) के साथ उपयोग कर सकते हैं। इसके अलावा, छवियों को हमेशा और ग्राहकों को बैंडविड्थ को बचाने के लिए कैश किया जाना चाहिए।

    +0

    यदि आप मेरा प्रश्न पढ़ते हैं, तो मैं नहीं पूछ रहा हूं कि डिस्क या डीबी सर्वोत्तम है या नहीं। इसके अलावा, आपने ऊपर दिए गए मेरे प्रश्न का वर्णन अभी (अधिक शब्दों में) किया है। – Steven

    +0

    हाय स्टीवन, यदि आप फिर से मेरा जवाब पढ़ते हैं, तो मैंने आपके प्रश्नों का उत्तर देने का प्रयास किया है, यदि यह स्पष्ट नहीं है: 1) हां आपको छवियों को एकाधिक फ़ोल्डरों में विभाजित करना चाहिए (प्रति उपयोगकर्ता सर्वश्रेष्ठ एक फ़ोल्डर)। 2) नहीं, आपको फ़ाइल नाम के लिए एमडी 5 की आवश्यकता नहीं है, बस अपलोड की डेटटाइम का उपयोग करें। 3) हां, यदि आप सर्वर पर एक ही छवि नहीं बदलते हैं तो आपको छवियों को कैश करना चाहिए (es: छवि फसल हो जाती है और उसी फ़ाइल नाम को बनाए रखती है)। यदि वह नहीं है जो आप ढूंढ रहे हैं तो कृपया अपने प्रश्न को दोबारा सुधारें। –

    संबंधित मुद्दे

     संबंधित मुद्दे