हम छवियों को कहां संग्रहीत करते हैं?
MongoDB में समाधान # 1
तो पहला समाधान मोंगोडीबी के अंदर छवियों को स्टोर करना है। यह छवि फ़ाइलों या किसी फ़ाइल प्रकार को समायोजित कर सकता है। तो आप एक फ़ाइल ले सकते हैं और इसे MongoDB के अंदर एक रिकॉर्ड से जोड़ सकते हैं और इसे सीधे अपने डेटाबेस में सहेज सकते हैं।
इस दृष्टिकोण के साथ कपड़ों के किसी विशेष लेख के विवरण पृष्ठ को उसकी संबंधित छवि के साथ बांधना आसान हो जाता है क्योंकि आप इस छवि को सीधे उस पृष्ठ के विकास में एम्बेड कर सकते हैं और आपका ग्राहक उस दृष्टिकोण से खुश होगा क्योंकि जब उपयोगकर्ता विस्तृत विवरण प्राप्त करता है कपड़ों के उस लेख का पृष्ठ छवि के साथ आता है।
तो यह एक संभावित समाधान है, बस छवि लें और सीधे MongoDB में संग्रहीत करें।
हालाँकि, मैं सुझाव देने जा रहा हूँ कि यह एक बुरा तरीका है। इसका कारण, आप अपने क्लाइंट को बता सकते हैं कि क्या पुशबैक है कि वे आम तौर पर अपने मोंगो उदाहरण के लिए भुगतान करेंगे, जो कि उनकी मोंगो कॉपी का उपयोग करता है।
इसलिए जितना अधिक संग्रहण वे उपयोग करते हैं, वे प्रति माह अधिक धन का भुगतान करते हैं।
उदाहरण के लिए, पिछली बार जब मैंने एमएलएबी के उपयोग की जांच की थी, तो वे $15 प्रति जीबी चार्ज कर रहे थे। तो 1GB मूल्य की छवियों को होस्ट करने के लिए आपके ग्राहकों की जेब में से $15 है।
अभी तक एक और ई-कॉमर्स वेबसाइट के लिए, हम 3GB आसान के बारे में बात कर रहे हैं जो 330 छवियों में कम या ज्यादा, समान रूप से $ 15 प्रति माह का अनुवाद करता है।
इसलिए यदि उनका कोई प्रोजेक्ट मैनेजर दिन में एक बार कपड़ों का एक नया लेख अपलोड कर रहा है, तो हम बहुत जल्दी एक जबरदस्त लागत के बारे में बात कर रहे हैं।
इसलिए, व्यक्तिगत रूप से मुझे लगता है कि किसी भी प्रकार की फ़ाइल को सीधे MongoDB के अंदर संग्रहीत करना वास्तव में एक विकल्प नहीं है क्योंकि यह बहुत महंगा हो जाएगा।
तो यह सिर्फ एक संभावित समाधान है।
समाधान # 2 HD में सर्वर से जुड़ा हुआ है
तो आइए एक दूसरा समाधान देखें जो आपके लिए उपलब्ध हो सकता है। आप एक हार्ड ड्राइव का उपयोग कर सकते हैं जो आपके एक्सप्रेस सर्वर से जुड़ा हो। इसलिए जब यह एप्लिकेशन हरोकू, डिजिटल ओशन, लिनोड या एडब्ल्यूएस जैसे कुछ क्लाउड वातावरण में तैनात हो जाता है, तो आपको आमतौर पर आपके एप्लिकेशन से जुड़ी एक हार्ड ड्राइव मिलती है।
तो हो सकता है कि आप छवियों को लें और उन्हें स्थानीय हार्ड ड्राइव के अंदर रखें। ऑनलाइन पोस्ट और लेखों के विशाल बहुमत के लिए यही दृष्टिकोण है:
कैसे नोड.जेएस और एक्सप्रेस का उपयोग करके छवियों को अपलोड, प्रदर्शित और सहेजने के लिए
https://appdividend. com/2019/02/14/नोड-एक्सप्रेस-इमेज-अपलोड-एंड-रीसाइज-ट्यूटोरियल-उदाहरण/
https://medium.com/@nitinpatel_20236/image-upload -वाया-नोडज-सर्वर-3fe7d3faa642
मैंने ऊपर जिन तीनों को इकट्ठा किया है, उनके साथ शुरू करने के लिए आपके पास एक बहुत मजबूत खाका है।
हर एक कहता है कि फ़ाइल ले लो और इसे अपने स्थानीय हार्ड ड्राइव में सहेजें। इस विशेष लेख में:
https://alligator.io/nodejs/uploading-files-multer-express/
वे यह कोड दिखा रहे हैं:
const storage = multer.diskStorage({
destination: 'some-destination',
filename: function (req, file, callback) {
//..
}
});
वे multer
. नामक इमेज अपलोड लाइब्रेरी का उपयोग कर रहे हैं जो diskStorage()
. प्रदान करता है डिस्क पर चित्र अपलोड करने के लिए इंजन।
तो यह एक ऐसा दृष्टिकोण है जिससे विकास समुदाय व्यापक रूप से सहमत है।
वन-टू-वन मैपिंग के संदर्भ में यह एक अच्छा तरीका है।
इस दृष्टिकोण के साथ समस्याएँ तब उत्पन्न होने लगती हैं जब हमारे पास कई मशीनें होती हैं।
इसका एक उदाहरण यह है कि यदि आपके पास डिजिटल महासागर या लिनोड पर होस्ट की गई कई मशीनें हैं, जहां प्रत्येक वातावरण एक अलग उदाहरण है।
यदि आपके पास आपकी सभी छवियां संलग्न हार्ड ड्राइव में संग्रहीत हैं और फिर आप अपने सर्वर को बढ़ाना शुरू करते हैं, तो उनमें से प्रत्येक की अपनी अलग हार्ड ड्राइव होगी।
तो आपके पास एक अनुरोध हो सकता है जो लोड बैलेंसर के माध्यम से आता है और लोड बैलेंसर यह तय करता है कि नीचे दिए गए आरेख को पसंद करने के लिए अनुरोध कहां भेजा जाए:
तो उपरोक्त आर्किटेक्चर के साथ समस्या यह है कि यदि छवि दो हार्ड ड्राइव में से एक में सहेजी जाती है और फिर बाद में उसी छवि तक पहुंचने के लिए अनुरोध आता है, लेकिन कल्पना करें कि अनुरोध दूसरे एक्सप्रेस सर्वर पर एक अलग हार्ड ड्राइव के साथ भेजा जाता है जहां छवि मौजूद नहीं है।
यह एक समस्या है जो तब सामने आती है जब आप लिनोड या डिजिटल ओशन जैसे सेवा प्रदाता का उपयोग करना शुरू करते हैं जहां आपके पास सर्वर और हार्ड ड्राइव के बीच एक-से-एक मैपिंग है।
यह एक अल्पकालिक समाधान है यदि आपको अभी इसकी आवश्यकता है, लेकिन एक बार जब यह एप्लिकेशन बड़े पैमाने पर शुरू हो जाता है तो यह एक समस्या होगी।
डेटा स्टोर के बाहर समाधान # 3
यह तीसरा समाधान वह है जिसे मैंने अतीत में नोड अनुप्रयोगों के साथ प्रतिक्रिया और रेल अनुप्रयोगों पर रूबी के साथ भी उपयोग किया है। वास्तव में, मेरी रूबी ऑन रेल्स पोर्टफोलियो वेबसाइट इस समाधान का उपयोग करती है और यह हरोकू प्लेटफॉर्म पर बैठता है।
इसलिए जब छवि अपलोड हो जाती है, तो एक्सप्रेस एपीआई फ़ाइल को स्थानीय रूप से अपनी हार्ड ड्राइव पर संग्रहीत करने की कोशिश करने के बजाय, यह छवि लेगा और ऐप से सभी अलग-अलग छवियों को रखने के लिए बाहरी डेटा स्टोर का उपयोग करेगा।
मैं अपने पोर्टफोलियो वेबसाइट के लिए उपयोग करता हूं और जो मैंने नोड के लिए रिएक्ट अनुप्रयोगों के साथ उपयोग किया है वह अमेज़ॅन एस 3 है, लेकिन वहां एज़ूर फ़ाइल स्टोरेज और Google क्लाउड स्टोरेज भी मौजूद है। इन प्रणालियों को भारी मात्रा में डेटा रखने के लिए बनाया गया है और वे किसी भी प्रकार की फ़ाइल हो सकती हैं जिसकी आप संभवतः कल्पना कर सकते हैं। न केवल आपके मामले में छवियां, बल्कि वीडियो फ़ाइलें, ऑडियो फ़ाइलें, वगैरह।
S3 के साथ आपके पास कितनी मात्रा में संग्रहण हो सकता है, इसकी कोई सीमा नहीं है, लेकिन आपको S3 का उपयोग करने की आवश्यकता नहीं है, लेकिन इसे अभी एक उद्योग मानक के रूप में देखा जाता है, लेकिन आप आसानी से Azure और Google क्लाउड का भी उपयोग कर सकते हैं।पी>
इस समाधान का लाभ जो मुझे लगता है कि आपका ग्राहक सराहना करेगा, Amazon S3 आपसे भंडारण के लिए प्रति माह दो पैसे प्रति गीगाबाइट चार्ज करता है।