इस पर आने और यथोचित रूप से यह समझने में कि एक रिलेशनल डेटाबेस पर माइग्रेशन कैसे काम करता है, MongoDB इसे थोड़ा सरल बनाता है। मैं इसे तोड़ने के 2 तरीके लेकर आया हूं। MongoDB में डेटा माइग्रेशन से निपटने पर विचार करने वाली चीज़ें (RDBs से असामान्य नहीं) हैं:
- यह सुनिश्चित करना कि जब कोई डेवलपर प्रोजेक्ट रिपॉजिटरी से नवीनतम को मर्ज करता है तो स्थानीय परीक्षण वातावरण नहीं टूटता है
- यह सुनिश्चित करना कि कोई भी डेटा लाइव संस्करण पर सही ढंग से अपडेट किया गया है, भले ही उपयोगकर्ता लॉग इन या आउट हो, यदि प्रमाणीकरण का उपयोग किया जाता है। (बेशक अगर अपग्रेड किए जाने पर हर कोई अपने आप लॉग आउट हो जाता है, तो केवल इस बात की चिंता करना कि उपयोगकर्ता कब लॉग इन करना आवश्यक है)।
1) यदि आपका परिवर्तन सभी को लॉग आउट कर देगा या एप्लिकेशन डाउनटाइम की उम्मीद है तो ऐसा करने का सरल तरीका स्थानीय या लाइव मोंगोडीबी से कनेक्ट करने और सही डेटा अपग्रेड करने के लिए माइग्रेशन स्क्रिप्ट है। उदाहरण जहां एक उपयोगकर्ता का नाम एक स्ट्रिंग से किसी ऑब्जेक्ट में दिए गए और परिवार के नाम के साथ बदल दिया जाता है (बेशक बहुत बुनियादी और सभी डेवलपर्स के लिए चलाने के लिए एक स्क्रिप्ट में डालने की आवश्यकता होगी):
सीएलआई का उपयोग करना:
mongod
use myDatabase
db.myUsers.find().forEach( function(user){
var curName = user.name.split(' '); //need some more checks..
user.name = {given: curName[0], family: curName[1]};
db.myUsers.save( user );
})
2) आप चाहते हैं कि एप्लिकेशन उनके द्वारा चलाए जा रहे एप्लिकेशन संस्करण के आधार पर स्कीमा को ऊपर और नीचे माइग्रेट करे। यह स्पष्ट रूप से एक लाइव सर्वर के लिए एक बोझ से कम होगा और उपयोगकर्ताओं को केवल अपग्रेड करने के कारण डाउन टाइम की आवश्यकता नहीं होगी जब वे पहली बार अपग्रेड/डाउनग्रेड किए गए संस्करणों का उपयोग करेंगे।
यदि आप Nodejs के लिए Expressjs में मिडलवेयर का उपयोग कर रहे हैं:
- अपनी रूट ऐप स्क्रिप्ट में
app.set('schemaVersion', 1)
के ज़रिए ऐप वैरिएबल सेट करें जिसका उपयोग बाद में उपयोगकर्ता स्कीमा संस्करण से तुलना करने के लिए किया जाएगा। - अब सुनिश्चित करें कि सभी उपयोगकर्ता स्कीमा में एक schemaVersion संपत्ति भी है ताकि हम केवल उस विशेष उपयोगकर्ता के लिए एप्लिकेशन स्कीमा संस्करण और वर्तमान MongoDB स्कीमा के बीच परिवर्तन का पता लगा सकें।
-
आगे हमें कॉन्फ़िगरेशन और उपयोगकर्ता संस्करण का पता लगाने के लिए सरल मिडलवेयर बनाने की आवश्यकता है
app.use( function( req, res, next ){ //If were not on an authenticated route if( ! req.user ){ next(); return; } //retrieving the user info will be server dependent if( req.user.schemaVersion === app.get('schemaVersion')){ next(); return; } //handle upgrade if user version is less than app version //handle downgrade if user version is greater than app version //save the user version to your session / auth token / MongoDB where necessary })
अपग्रेड/डाउनग्रेड के लिए मैं अपग्रेड/डाउनग्रेड निर्यात फ़ंक्शन के साथ माइग्रेशन निर्देशिका के तहत सरल जेएस फाइलें बनाउंगा जो उपयोगकर्ता मॉडल को स्वीकार करेगा और मोंगोडीबी में उस विशेष उपयोगकर्ता पर माइग्रेशन परिवर्तन चलाएगा। अंत में सुनिश्चित करें कि उपयोगकर्ता संस्करण आपके MongoDB में अपडेट किया गया है ताकि वे परिवर्तनों को फिर से न चलाएँ जब तक कि वे फिर से किसी भिन्न संस्करण में नहीं जाते।