आप जैसे पाठक MUO का समर्थन करने में मदद करते हैं। जब आप हमारी साइट पर लिंक का उपयोग करके खरीदारी करते हैं, तो हम संबद्ध कमीशन अर्जित कर सकते हैं।
उत्पादन-तैयार वेब एप्लिकेशन बनाने के लिए आपको यह सुनिश्चित करने की आवश्यकता है कि यह सुरक्षित और स्केलेबल है।
डेटाबेस के बारे में जानने के लिए सबसे महत्वपूर्ण चीजों में से एक एसीआईडी सिद्धांत है जो परमाणुता, स्थिरता, अलगाव और स्थायित्व के लिए खड़ा है। MySQL जैसे संबंधपरक डेटाबेस मूल रूप से ACID लेनदेन का समर्थन करते हैं। लेकिन MongoDB एक NoSQL डेटाबेस है और डिफ़ॉल्ट रूप से ACID लेनदेन का समर्थन नहीं करता है।
एक प्रोग्रामर के रूप में, आपको पता होना चाहिए कि अपने मोंगोडीबी डेटाबेस में एसीआईडी गुणों को कैसे पेश किया जाए।
डेटाबेस लेनदेन क्या हैं?
एक डेटाबेस लेनदेन डेटाबेस प्रश्नों या संचालन का एक क्रम है जो सभी एक कार्य को पूरा करने के लिए एक इकाई के रूप में एक साथ निष्पादित होते हैं।
डेटाबेस लेनदेन ACID विशेषताओं की अवधारणाओं का पालन करते हैं। इससे यह सुनिश्चित करने में मदद मिलती है कि जब तक सभी ऑपरेशन सफल नहीं होते तब तक कोई बदलाव नहीं होता है। यह यह भी सुनिश्चित करता है कि डेटाबेस सुसंगत है।
एसिड गुण समझाया
एसीआईडी सिद्धांत बनाने वाले चार गुण हैं:
- परमाणुता वह संपत्ति है जो किसी कार्यक्रम की छोटी इकाइयों के रूप में लेनदेन की अवधारणा करती है। इसका तात्पर्य है कि सभी प्रश्न या तो सफलतापूर्वक चलते हैं या एक साथ विफल होते हैं।
- गाढ़ापन बताता है कि प्रत्येक लेनदेन से पहले और बाद में डेटाबेस रिकॉर्ड लगातार बने रहना चाहिए।
- एकांत यह सुनिश्चित करता है कि जब एक से अधिक लेन-देन एक साथ चलते हैं, तो एक दूसरे को प्रभावित नहीं करता है।
- सहनशीलता सिस्टम विफलताओं या दोषों पर केंद्रित है। यह सुनिश्चित करता है कि सिस्टम की विफलता की स्थिति में एक प्रतिबद्ध लेनदेन खो न जाए। सिस्टम के फिर से शुरू होने पर इसमें स्वचालित रूप से बैकअप से डेटा को पुनर्स्थापित करने के लिए आवश्यक तकनीकें शामिल हो सकती हैं।
Mongoose का उपयोग करके Node.js में MongoDB डेटाबेस लेनदेन को कैसे लागू करें
MongoDB पिछले कुछ वर्षों में व्यापक रूप से उपयोग की जाने वाली डेटाबेस तकनीक बन गई है इसकी NoSQL प्रकृति और लचीला दस्तावेज़-आधारित मॉडल। यह आपको SQL या संबंधपरक डेटाबेस की तुलना में अपने डेटा को बेहतर ढंग से व्यवस्थित करने और अधिक लचीलेपन की क्षमता भी प्रदान करता है।
मोंगोडीबी में डेटाबेस लेनदेन को लागू करने के लिए, आप नौकरी लिस्टिंग एप्लिकेशन पर एक नमूना परिदृश्य पर विचार कर सकते हैं जहां उपयोगकर्ता नौकरी पोस्ट, अपडेट या हटा सकता है। इस एप्लिकेशन के लिए यहां एक साधारण डेटाबेस स्कीमा डिज़ाइन है:
आगे बढ़ने के लिए, इस अनुभाग को Node.js प्रोग्रामिंग और MongoDB के बुनियादी ज्ञान की आवश्यकता है।
लेन-देन स्टैंडअलोन MongoDB स्थापनाओं पर समर्थित नहीं हैं। आपको ए का उपयोग करना होगा MongoDB प्रतिकृति सेट या मोंगोडीबी शार्डेड क्लस्टर काम करने के लिए लेनदेन के लिए। इसलिए, लेन-देन का उपयोग करने का सबसे आसान तरीका है क्लाउड-होस्टेड MongoDB उदाहरण बनाएँ (मोंगोडीबी एटलस)। डिफ़ॉल्ट रूप से, प्रत्येक एटलस डेटाबेस उदाहरण एक प्रतिकृति सेट या शार्ल्ड क्लस्टर है।
काम कर रहे Node.js और MongoDB प्रोजेक्ट को सेट करने के बाद, आप Node.js में Mongo डेटाबेस से कनेक्शन सेट कर सकते हैं। यदि आपने अब तक नहीं किया है, तो चलकर नेवला स्थापित करें एनपीएम नेवला स्थापित करें आपके टर्मिनल में।
आयात नेवला से नेवला
चलो MONGO_URL = process.env। MONGO_URL || 'आपका-मोंगो-डेटाबेस-url';
होने देना कनेक्शन;
कॉन्स्ट कनेक्ट डीबी = async () => {
कोशिश {
इंतजार नेवला.कनेक्ट (MOGO_URL, {
NewUrlParser का उपयोग करें: सत्य,
यूनिफाइड टोपोलॉजी का उपयोग करें: सत्य,
});
कंसोल लॉग ("डेटाबेस से जुड़ा");
कनेक्शन = नेवला। कनेक्शन;
} पकड़ना (गलती) {
कंसोल.त्रुटि ("डेटाबेस कनेक्शन विफल!");
सांत्वना देना।गलती(ग़लती होना।संदेश);
प्रक्रिया।बाहर निकलना(1); // डेटाबेस कनेक्शन विफल होने पर ऐप को बंद करें
}
};
आपको कनेक्शन को एक वेरिएबल में स्टोर करना चाहिए ताकि आप प्रोग्राम में बाद में लेनदेन शुरू करने के लिए इसका उपयोग कर सकें।
आप उपयोगकर्ताओं और नौकरियों के संग्रह को इस प्रकार लागू कर सकते हैं:
कॉन्स्ट उपयोगकर्ता स्कीमा = नया नेवला। स्कीमा({
नाम: डोरी,
ईमेल: डोरी,
नौकरियां: [नेवला। योजना। प्रकार। ऑब्जेक्ट आईडी]
});कॉन्स्ट जॉब स्कीमा = नया नेवला। स्कीमा({
शीर्षक: डोरी,
जगह: डोरी,
वेतन: डोरी,
पोस्टर: नेवलास्कीमाप्रकार.ऑब्जेक्टआईडी
});
const userCollection = नेवला.मॉडल ('उपयोगकर्ता', यूजरस्केमा);
कॉन्स्ट जॉबकोलेक्शन = नेवला.मॉडल ('काम', जॉबस्कीमा);
उपयोगकर्ता को डेटाबेस में जोड़ने के लिए आप इस तरह एक फ़ंक्शन लिख सकते हैं:
कॉन्स्ट क्रिएटयूज़र = async (उपयोगकर्ता) => {
कॉन्स्ट नया उपयोगकर्ता = इंतजार userCollection.create (उपयोगकर्ता);
सांत्वना देनालॉग ("उपयोगकर्ता डेटाबेस में जोड़ा गया");
सांत्वना देनालॉग (नया उपयोगकर्ता);
}
नीचे दिया गया कोड एक कार्य बनाने के लिए कार्य को प्रदर्शित करता है और डेटाबेस लेनदेन का उपयोग करके इसे अपने पोस्टर की नौकरियों की सूची में जोड़ता है।
कॉन्स्ट क्रिएटजॉब = async (नौकरी) => {
कॉन्स्ट {उपयोगकर्ता ईमेल, शीर्षक, स्थान, वेतन} = नौकरी;// उपयोगकर्ता को DB से प्राप्त करें
कॉन्स्ट उपयोगकर्ता = इंतजार userCollection.findOne({ ईमेल: उपयोगकर्ता ईमेल});// लेन-देन सत्र प्रारंभ करें
कॉन्स्ट सत्र = इंतजार कनेक्शन.स्टार्ट सत्र ();// सभी डेटाबेस प्रश्नों को ट्राइ-कैच ब्लॉक में चलाएं
कोशिश {
इंतजार सत्र प्रारंभ लेनदेन ();// जॉब क्रिएट करें
कॉन्स्ट नई नौकरी = इंतजार जॉबकोलेक्शन.क्रिएट (
[
{
शीर्षक,
जगह,
वेतन,
पोस्टर: user._id,
},
],
{ सत्र }
);
सांत्वना देना.लॉग ("बनाया गया नया नौकरी सफलतापूर्वक!");
सांत्वना देना.लॉग (नई नौकरी [0]);// पोस्ट की गई नौकरियों की उपयोगकर्ताओं की सूची में नौकरी जोड़ें
कॉन्स्ट न्यू जॉबआईड = न्यू जॉब [0]।_पहचान;
कॉन्स्ट जोड़ा उपयोगकर्ता = इंतजार userCollection.findByIdAndUpdate (
उपयोगकर्ता पहचान,
{ $addToSet: { नौकरियां: newJobId } },
{ सत्र }
);सांत्वना देना.log("सफलतापूर्वक उपयोगकर्ता की कार्य सूची में जोड़ा गया कार्य");
सांत्वना देना.लॉग (AddToUser);इंतजार session.commitTransaction();
सांत्वना देना.log("सफलतापूर्वक किया गया डीबी लेनदेन");
} पकड़ना (इ) {
सांत्वना देनात्रुटि (ई);
सांत्वना देना.log ("डेटाबेस संचालन को पूरा करने में विफल");
इंतजार session.abortTransaction ();
} आखिरकार {
इंतजार सत्र.अंत सत्र ();
सांत्वना देनालॉग ("समाप्त लेनदेन सत्र");
}
};
ए बनाएं लेन-देन में चलने वाली क्वेरी आमतौर पर एक सरणी लेती है और वापस करती है। आप इसे ऊपर दिए गए कोड में देख सकते हैं जहां यह बनाता है नयी नौकरी और उसका भंडारण करता है _पहचान संपत्ति मेंnewJobId चर।
उपरोक्त कार्य कैसे काम करते हैं इसका एक प्रदर्शन यहां दिया गया है:
कॉन्स्ट उपयोक्ता = {
नाम: "टिम्मी ओमोलाना",
ईमेल: "[email protected]",
};कॉन्स्ट मॉकजॉब = {
शीर्षक: "बिक्री प्रबंधक",
स्थान: "लागोस, नाइजीरिया",
वेतन: "$40,000",
उपयोगकर्ता ईमेल: "[email protected]", // बनाए गए उपयोगकर्ता का ईमेल
};कॉन्स्ट स्टार्ट सर्वर = async () => {
इंतजार कनेक्ट डीबी ();
इंतजार क्रिएटयूजर (मॉकयूजर);
इंतजार क्रिएटजॉब (मॉकजॉब);
};
स्टार्ट सर्वर ()
।तब()
.पकड़ ((त्रुटि) => सांत्वना देना.लॉग (त्रुटि));
यदि आप इस कोड को सेव करते हैं और इसका उपयोग करके चलाते हैं एनपीएम प्रारंभ या नोड आदेश, यह इस तरह एक उत्पादन का उत्पादन करना चाहिए:
मोंगोज़ का उपयोग करके मोंगोडीबी में एसीआईडी लेनदेन को लागू करने का एक और तरीका है लेनदेन के साथ () समारोह। यह दृष्टिकोण थोड़ा लचीलापन प्रदान करता है क्योंकि यह कॉलबैक फ़ंक्शन के अंदर सभी प्रश्नों को चलाता है जिसे आप फ़ंक्शन के तर्क के रूप में पास करते हैं।
आप उपयोग करने के लिए उपरोक्त डेटाबेस लेनदेन को दोबारा कर सकते हैं लेनदेन के साथ () इस कदर:
कॉन्स्ट क्रिएटजॉब = async (नौकरी) => {
कॉन्स्ट {उपयोगकर्ता ईमेल, शीर्षक, स्थान, वेतन} = नौकरी;// उपयोगकर्ता को DB से प्राप्त करें
कॉन्स्ट उपयोगकर्ता = इंतजार userCollection.findOne({ ईमेल: उपयोगकर्ता ईमेल});// लेन-देन सत्र प्रारंभ करें
कॉन्स्ट सत्र = इंतजार कनेक्शन.स्टार्ट सत्र ();// सभी डेटाबेस प्रश्नों को ट्राइ-कैच ब्लॉक में चलाएं
कोशिश {
कॉन्स्ट लेन-देन सफल = इंतजार सत्र। लेन-देन के साथ (async () => {
कॉन्स्ट नई नौकरी = इंतजार जॉबकोलेक्शन.क्रिएट (
[
{
शीर्षक,
जगह,
वेतन,
पोस्टर: user._id,
},
],
{ सत्र }
);सांत्वना देना.लॉग ("बनाया गया नया नौकरी सफलतापूर्वक!");
सांत्वना देना.लॉग (नई नौकरी [0]);// पोस्ट की गई नौकरियों की उपयोगकर्ताओं की सूची में नौकरी जोड़ें
कॉन्स्ट न्यू जॉबआईड = न्यू जॉब [0]।_पहचान;
कॉन्स्ट जोड़ा उपयोगकर्ता = इंतजार userCollection.findByIdAndUpdate (
उपयोगकर्ता पहचान,
{ $addToSet: { नौकरियां: newJobId } },
{ सत्र }
);सांत्वना देना.log("सफलतापूर्वक उपयोगकर्ता की कार्य सूची में जोड़ा गया कार्य");
सांत्वना देना.लॉग (AddToUser);
});
अगर (लेन-देन सफल) {
सांत्वना देना.log("सफलतापूर्वक किया गया डीबी लेनदेन");
} अन्य {
सांत्वना देनालॉग ("लेनदेन विफल");
}
} पकड़ना (इ) {
सांत्वना देनात्रुटि (ई);
सांत्वना देना.log ("डेटाबेस संचालन को पूरा करने में विफल");
} आखिरकार {
इंतजार सत्र.अंत सत्र ();
सांत्वना देनालॉग ("समाप्त लेनदेन सत्र");
}
};
यह पिछले कार्यान्वयन के समान आउटपुट का उत्पादन करेगा। MongoDB में डेटाबेस लेन-देन लागू करते समय आप किस शैली का उपयोग करने के लिए स्वतंत्र हैं।
यह कार्यान्वयन उपयोग नहीं करता है प्रतिबद्ध लेनदेन () और गर्भपात () कार्य करता है। ऐसा इसलिए है क्योंकि लेनदेन के साथ () फ़ंक्शन स्वचालित रूप से सफल लेन-देन करता है और विफल लोगों को निरस्त करता है। एकमात्र कार्य जिसे आपको सभी मामलों में कॉल करना चाहिए वह है सत्र.अंत सत्र () समारोह।
MongoDB में ACID डेटाबेस लेनदेन को लागू करना
सही ढंग से किए जाने पर डेटाबेस लेनदेन का उपयोग करना आसान होता है। अब आपको समझना चाहिए कि मोंगोडीबी में डाटाबेस लेनदेन कैसे काम करता है और आप उन्हें नोड.जेएस अनुप्रयोगों में कैसे कार्यान्वित कर सकते हैं।
एसीआईडी लेनदेन के विचार और मोंगोडीबी में वे कैसे काम करते हैं, इसका पता लगाने के लिए, फिनटेक वॉलेट या ब्लॉगिंग एप्लिकेशन बनाने पर विचार करें।