कई अनुप्रयोगों में फ़ाइल प्रबंधन शामिल होता है और डेटा प्रोसेसिंग को बढ़ाने के लिए एक महत्वपूर्ण विशेषता के रूप में फ़ाइल संग्रहण होता है। फ़ाइल भंडारण के लिए अक्सर एक तृतीय पक्ष सीडीएन (सामग्री वितरण नेटवर्क) की आवश्यकता होती है, जैसे कि अमेज़ॅन वेब सेवाएं, लेकिन यह प्रबंधन प्रक्रिया को थोड़ा थकाऊ बनाता है। एक से अधिक क्लाउड स्टोरेज के बजाय एक ही क्लाउड स्टोरेज से अपने सभी संसाधनों तक पहुंचना आसान होगा, क्योंकि पुनर्प्राप्ति के दौरान विफलता की संभावना हो सकती है।
एक एकल API कॉल के माध्यम से सीधे डेटाबेस में फ़ाइलों को संग्रहीत करना MongoDB में GridFS की शुरूआत तक आसानी से कुछ नहीं किया गया है।
MongoDB GridFS क्या है
ग्रिडएफ MongoDB में एक अमूर्त परत है जिसका उपयोग वीडियो, ऑडियो और छवियों जैसी बड़ी फ़ाइलों के भंडारण और पुनर्प्राप्ति में किया जाता है। यह फ़ाइल सिस्टम उन फ़ाइलों को संग्रहीत करता है जो MongoDB डेटा संग्रह के भीतर 16 एमबी से भी अधिक महत्वपूर्ण हैं। फ़ाइलों को पहले डेटा के छोटे टुकड़ों में तोड़कर संग्रहीत किया जाता है, प्रत्येक टुकड़े का आकार 255 केबी होता है।
ग्रिडएफएस फाइलों को संग्रहित करने के लिए दो संग्रह प्रणालियों का उपयोग करता है:
- चंक :यह वह संग्रह है जो दस्तावेज़ भागों को संग्रहीत करता है। भाग 255KB प्रत्येक के आकार तक सीमित हैं और जब कोई क्वेरी करता है, तो GridFS ड्राइवर अद्वितीय _id संग्रहण के अनुसार सभी विखंडू को फिर से इकट्ठा करता है। उदाहरण के लिए, आप पूरी फ़ाइल के बजाय किसी वीडियो फ़ाइल के एक खंड को पुनः प्राप्त करना चाह सकते हैं, यह केवल अपनी इच्छित सही श्रेणी को क्वेरी करके संभव है।
- फ़ाइल :यह फ़ाइल के लिए परिणामी अतिरिक्त मेटाडेटा संग्रहीत करता है।
संग्रहों को एक सामान्य बकेट में रखा जाता है और फिर प्रत्येक को बकेट नाम के साथ उपसर्ग किया जाता है जो डिफ़ॉल्ट रूप से fs होता है और इसलिए हमारे पास:
- fs.chunks
- fs.files
कोई दूसरा बकेट नाम चुन सकता है लेकिन पूरा संग्रह नाम इसके अधीन है:नाम स्थान सीमा 255 बाइट्स।
चंक संग्रह
चंक संग्रह दस्तावेज़ों में यह फ़ॉर्म होता है:
{
"_id" : <ObjectId>,
"files_id" : <ObjectId>,
"n" : <num>,
"data" : <binary>
}
कहां:
- _id:खंड के लिए विशिष्ट पहचानकर्ता है
- files_id:फ़ाइल संग्रह में संग्रहीत मूल दस्तावेज़ का _id है
- n:0 से शुरू होने वाले खंड की क्रम संख्या है।
- डेटा:बीएसओएन बाइनरी प्रकार के रूप में खंड का पेलोड है।
files_id और n फ़ील्ड का उपयोग कर एक यौगिक अनुक्रमणिका का उपयोग उदाहरण के लिए चंक्स की कुशल पुनर्प्राप्ति की अनुमति देने के लिए किया जाता है:
db.fs.chunks.find( { files_id: fileId } ).sort( { n: 1 } )
इस इंडेक्स को बनाने के लिए यदि यह मौजूद नहीं है तो आप मोंगो शेल पर निम्न कमांड चला सकते हैं:
db.fs.chunks.createIndex( { files_id: 1, n: 1 }, { unique: true } );
फ़ाइलों का संग्रह
इस संग्रह के दस्तावेज़ रूप लेते हैं
{
"_id" : <ObjectId>,
"length" : <num>,
"chunkSize" : <num>,
"uploadDate" : <timestamp>,
"filename" : <string>,
"metadata" : <any>,
}
कहां:
- _id:उस दस्तावेज़ के लिए विशिष्ट पहचानकर्ता है जो मूल दस्तावेज़ के लिए चुने गए डेटा प्रकार का है और डिफ़ॉल्ट रूप से MongoDB में BSON ObjectId है।
- लंबाई:दस्तावेज़ का आकार बाइट्स में है
- chunkSize:प्रत्येक खंड का आकार जो 255 किलोबाइट तक सीमित है
- अपलोड दिनांक:दिनांक प्रकार का फ़ील्ड जो उस दिनांक को संग्रहीत करता है जिस दिनांक को दस्तावेज़ पहली बार संग्रहीत किया गया था।
- फ़ाइल नाम:यह एक वैकल्पिक फ़ील्ड है जो फ़ाइल के लिए मानव पठनीय पहचान है।
- मेटाडेटा:यह एक वैकल्पिक फ़ील्ड है जिसमें अतिरिक्त जानकारी होती है जिसे कोई संग्रहीत करना चाहता है।
fs फ़ाइल का एक उदाहरण नीचे दिखाया गया है।
{
"filename": "file.html",
"chunkSize": NumberInt(23980),
"uploadDate": ISODate("2020-08-11T10:02:15.237Z"),
"length": NumberInt(312)
}
चंक्स संग्रह की तरह, फ़ाइल संग्रह में फ़ाइल नाम और अपलोडडेट फ़ील्ड का उपयोग करके एक मिश्रित अनुक्रमणिका का उपयोग फ़ाइलों की कुशल पुनर्प्राप्ति की अनुमति देने के लिए किया जाता है, उदाहरण के लिए:
db.fs.files.find( { filename: fileName } ).sort( { uploadDate: 1 } )
इस इंडेक्स को बनाने के लिए यदि यह मौजूद नहीं है तो आप मोंगो शेल पर निम्न कमांड चला सकते हैं:
db.fs.file.createIndex( { filename: 1, uploadDate: 1 }, { unique: true } );
MongoDB GridFS स्टोरेज सिस्टम का उपयोग कब करें
MongoDB GridFS का आमतौर पर उपयोग नहीं किया जाता है, लेकिन निम्नलिखित स्थितियाँ हैं जिनके लिए इस GridFS संग्रहण सिस्टम के उपयोग की आवश्यकता हो सकती है;
- जब वर्तमान फ़ाइल सिस्टम में किसी निर्देशिका में संग्रहीत की जा सकने वाली फ़ाइलों की संख्या की सीमा होती है।
- जब कोई संग्रहीत जानकारी के हिस्से तक पहुंचने का इरादा रखता है, तो GridFS पूरे दस्तावेज़ को एक्सेस किए बिना फ़ाइल के कुछ हिस्सों को वापस बुलाने में सक्षम बनाता है।
- जब कोई भौगोलिक रूप से वितरित प्रतिकृति सेट के माध्यम से फ़ाइलों और उनके मेटाडेटा को वितरित करने का इरादा रखता है, तो GridFS मेटाडेटा को स्वचालित रूप से कई लक्षित सिस्टम में डेटा को सिंक और तैनात करने की अनुमति देता है।
MongoDB GridFS स्टोरेज सिस्टम का उपयोग कब नहीं करना चाहिए
ग्रिडएफएस स्टोरेज सिस्टम का उपयोग करने के लिए उपयुक्त नहीं है जब ग्रिडएफएस में सहेजी गई पूरी फाइल की सामग्री को अपडेट करने की आवश्यकता होगी।
ग्रिडएफएस में फाइल कैसे जोड़ें
ग्रिडएफ का उपयोग करके MongoDB में एक एमपी3 फ़ाइल संग्रहीत करते समय, पालन करने की सही प्रक्रिया यह है;
- टर्मिनल खोलें (कमांड प्रॉम्प्ट)
- mongofiles.exe पर नेविगेट करें (यह बिन फ़ोल्डर में स्थित है)
- कमांड का इस्तेमाल करें
>mongofiles.exe -d gridfs put song.mp3
कमांड के बाद, उपयोग किए जाने वाले डेटाबेस का नाम ग्रिडफ़ है, यदि संयोग से, नाम गायब है, तो MongoDB स्वचालित रूप से एक दस्तावेज़ बनाता है जो डेटाबेस पर फ़ाइल को संग्रहीत करता है।
ग्रिडएफएस में संग्रहीत फ़ाइल को देखने के लिए मैंगो शेल पर नीचे दिए गए क्वेरी कमांड का उपयोग करें;
>db.fs.files.find()
कमांड नीचे दिखाए गए प्रारूप के साथ एक दस्तावेज़ लौटाता है:
{
_id: ObjectId('526a922bf8b4aa4d33fdf84d'),
filename: "song.mp3",
chunkSize: 233390,
uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
length: 10302960
}
फ़ाइल में निम्न विवरण, फ़ाइल नाम, लंबाई, अपलोड करने की तिथि, खंड आकार, और object_id है। fs.chunks संग्रह में भाग को प्रारंभिक क्वेरी में दी गई आईडी का उपयोग करके देखा जा सकता है जैसा कि नीचे दिखाया गया है।
>db.fs.chunks.find({files_id:ObjectId('526a922bf8b4aa4d33fdf84d')})
ग्रिडएफएस शेयरिंग
ग्रिडएफएस के साथ साझा करना भी एक अन्य विशेषता है। चंक्स संग्रह को शार्प करने के लिए कोई भी {files_id:1, n:1} या {files_id:1} के कंपाउंड इंडेक्स का उपयोग शार्ड की के रूप में कर सकता है।
हर्शेड शेयरिंग केवल तभी संभव है जब MongoDB ड्राइवर filemd5 नहीं चलाते हैं।
फ़ाइल संग्रह अक्सर शार्प नहीं होते क्योंकि उनमें केवल मेटाडेटा होता है और बहुत छोटे होते हैं। उपलब्ध कुंजियाँ न तो शार्प किए गए क्लस्टर में समान वितरण प्रदान करती हैं। हालांकि, अगर किसी को फ़ाइल संग्रह को शार्प करने की आवश्यकता है, तो आप कुछ एप्लिकेशन फ़ील्ड के संयोजन में _id फ़ील्ड का उपयोग कर सकते हैं।
ग्रिडएफएस सीमाएं
ग्रिडएफएस फाइल सिस्टम की निम्नलिखित सीमाएं हैं:
- परमाणु अद्यतन: ग्रिडएफएस में परमाणु अद्यतन नहीं है। यह फाइलों के आवश्यक संस्करण को चुनकर और फाइलों के कई संस्करणों को चालू रखते हुए मैन्युअल रूप से अपडेट करना आसान बनाता है
- प्रदर्शन : फ़ाइल सिस्टम और वेब सर्वर के साथ सिस्टम धीमा हो जाता है।
- कार्य सेट: एक नए वर्किंग सेट पर काम करते समय कोई अन्य सर्वर का उपयोग करता है। ऐसा इसलिए किया जाता है ताकि रनिंग वर्किंग सेट को परेशान न किया जा सके।
निष्कर्ष
ग्रिडएफएस उन डेवलपर्स के लिए एक चांदी की गोली की तरह है जो मोंगोडीबी में बड़ी फाइलों को स्टोर करने का इरादा रखते हैं। ग्रिडएफएस स्टोरेज सिस्टम डेवलपर्स को बड़ी फाइलों को स्टोर करने और आवश्यक फाइलों के कुछ हिस्सों को पुनः प्राप्त करने का मौका देता है। इसलिए, ग्रिडएफएस एक उत्कृष्ट मोंगोडीबी सुविधा है जिसका उपयोग विभिन्न अनुप्रयोगों के साथ किया जा सकता है।