PostgreSQL या MongoDB: तेज लेखन लेन-देन की गारंटी नहीं

|लेखक: QUASA संपादकीय टीम|7 मिनट पढ़ने का समय
PostgreSQL या MongoDB: तेज लेखन लेन-देन की गारंटी नहीं

लेन-देन वाले नए अनुप्रयोग के लिए PostgreSQL और MongoDB में किसी एक को केवल लेखन गति के आधार पर चुनना ठीक नहीं होगा। निर्णायक बात यह है कि परस्पर निर्भर बदलाव एक दस्तावेज़ में समाते हैं या कई रिकॉर्ड में फैलते हैं, और सफल कमिट के बाद डेटा के सुरक्षित रहने की क्या शर्त है। तेज लिखाई उस पूरे अनुरोध की गति या टिकाऊपन नहीं बताती जिसे उपयोगकर्ता सफल मानता है।

MongoDB में एक दस्तावेज़ को बदलना सीधा रास्ता है और कई दस्तावेज़ों के लिए भी लेन-देन उपलब्ध हैं। PostgreSQL संबंधित रिकॉर्ड को एक लेन-देन में बदलने का परिचित संबंधपरक ढाँचा देता है। भारतीय अनुप्रयोग दल के लिए व्यावहारिक तुलना समान काम, समान सफलता शर्त और अनुप्रयोग से देखे गए पठन तथा लेखन समय पर टिकनी चाहिए।

बदलाव एक दस्तावेज़ में समाता है या कई में?

साइकिल आदेश के साथ रखे हिस्से और अलग रखे जुड़े हिस्से एकल दस्तावेज़ तथा बहु-दस्तावेज़ बदलाव का अंतर दिखाते हैं।

MongoDB का दस्तावेज़ मॉडल तब उपयोगी हो सकता है जब साथ पढ़ी और बदली जाने वाली जानकारी साथ रखी जा सके। किसी काल्पनिक दुकान में आदेश और उसकी वस्तुओं का विवरण इसका उम्मीदवार है। मगर उसी आदेश से जुड़ा स्वतंत्र स्टॉक, ग्राहक खाता या भुगतान रिकॉर्ड अलग जगह बदलता हो, तो एक आदेश दस्तावेज़ में सब कुछ समेट देने से साझा बदलाव की आवश्यकता समाप्त नहीं होती। डेटा की सीमा कारोबार की आवश्यकता तय करती है, डेटाबेस का नाम नहीं।

MongoDB का लेन-देन विवरण एक दस्तावेज़ पर कार्रवाई को परमाणु बताता है और कई दस्तावेज़ों, संग्रहों तथा शार्डों में फैले बदलावों के लिए लेन-देन की सुविधा दर्ज करता है। दस्तावेज़ कई रिकॉर्ड में बँटने पर कमिट का अतिरिक्त काम तुलना में आता है; आधिकारिक विवरण के अनुसार वितरित लेन-देन की लागत प्रायः एकल दस्तावेज़ लेखन से अधिक होती है। इसलिए तेज एकल दस्तावेज़ प्रविष्टि को साझा लेन-देन का प्रदर्शन मान लेना गलत तुलना होगी।

इस सुविधा की परिचालन सीमाएँ भी डेटा मॉडल से जुड़ती हैं। लेन-देन के भीतर संग्रह बनाया जा सकता है, लेकिन नया अनुक्रमणिका केवल उस संग्रह पर बनाया जा सकता है जो नया और खाली हो; कई शार्डों में लिखने वाले लेन-देन में नया संग्रह नहीं बनाया जा सकता। यदि अनुप्रयोग चलते समय नई डेटा संरचना बनाता है, तो यह सीमा सामान्य अनुरोध के रास्ते को प्रभावित कर सकती है। पहले से बने संग्रहों में साधारण रिकॉर्ड लेखन और चलती लिखाई के साथ संरचना बनाना अलग कार्यभार हैं।

कई संबंधित रिकॉर्ड साथ बदलने पर

PostgreSQL में संबंधित लिखाइयों को एक लेन-देन में रखने से वे साथ लागू होती हैं या साथ वापस ली जाती हैं। PostgreSQL का लेन-देन विवरण स्पष्ट करता है कि खुले लेन-देन के बीच के बदलाव दूसरे समकालिक लेन-देन को दिखाई नहीं देते। सामान्य समकालिक कमिट में सफलता लौटने से पहले पूरे लेन-देन के बदलाव स्थायी भंडारण के अभिलेख में दर्ज हो जाते हैं। यह व्यवहार उस अनुरोध के लिए मायने रखता है जिसमें आधा पूरा बदलाव स्वीकार्य नहीं।

मान लें कि एक काल्पनिक आदेश की स्थिति बदलते समय उससे जुड़ा उपलब्ध स्टॉक भी घटना चाहिए। यदि स्थिति बदल जाए और स्टॉक न घटे, तो अनुप्रयोग ने उपयोगकर्ता को अधूरा परिणाम दिया। PostgreSQL में दोनों लिखाइयाँ एक लेन-देन में रखी जा सकती हैं; MongoDB में भी अलग दस्तावेज़ों के लिए ऐसा लेन-देन संभव है। तुलना तब दोनों प्रणालियों में पूरे अनुरोध के कमिट तक पहुँचने वाले समय की है, अकेली प्रविष्टि की नहीं।

रिकॉर्ड के बीच संबंध पठन को भी बदलते हैं। अलग रखे ग्राहक, उत्पाद और आदेश डेटा पर पूछे गए प्रश्नों में कई रिकॉर्ड जोड़ने पड़ सकते हैं; साथ रखे दस्तावेज़ में वही उत्तर सीधे मिल सकता है, बशर्ते आवश्यक जानकारी वास्तव में साथ रखी गई हो। बार-बार बदलने वाला साझा उत्पाद या स्टॉक कई आदेशों में दोहराया गया हो, तो उसे अद्यतन रखने का काम बढ़ेगा। इसलिए दस्तावेज़ संरचना का लाभ केवल लिखाई से नहीं, उस जानकारी को बाद में पढ़ने और बदलने के तरीके से निकलता है।

सफल कमिट कितनी सुरक्षा देता है?

MongoDB में लेन-देन की लेखन स्वीकृति शर्त पूरे कमिट पर लगती है, उसके भीतर हर लिखाई पर अलग नहीं। MongoDB के लेखन स्वीकृति नियम प्राथमिक सदस्य की स्वीकृति, बहुमत की स्वीकृति और डिस्क जर्नल में दर्ज होने की माँग के बीच अंतर बताते हैं। केवल प्राथमिक सदस्य से स्वीकृत बदलाव सदस्य बदलने पर वापस लिया जा सकता है। बहुमत की शर्त प्रतिकृति के अधिक सदस्यों से स्वीकृति माँगती है; जर्नल की शर्त यह तय करती है कि डिस्क पर दर्ज होने का इंतज़ार कब किया जाए।

इसका अर्थ है कि किसी प्रदर्शन मापन में ‘सफल लेखन’ की परिभाषा जानना ज़रूरी है। केवल प्राथमिक सदस्य के उत्तर तक मापा गया समय, बहुमत से स्वीकृत कमिट का समय नहीं है। इसी तरह डिस्क पर स्थानीय रूप से दर्ज होना और दूसरी प्रतिकृति तक पहुँचना अलग सुरक्षा शर्तें हैं। भुगतान या शेष राशि जैसे निर्भर बदलाव के लिए इनका परिणाम दोबारा तैयार किए जा सकने वाले घटनाक्रम अभिलेख से अलग हो सकता है।

PostgreSQL में भी गति और टिकाऊपन के बीच विकल्प है। PostgreSQL का असमकालिक कमिट विवरण बताता है कि इस विकल्प पर सफलता डिस्क पर लेन-देन का अभिलेख पहुँचने से पहले लौट सकती है और सर्वर दुर्घटनाग्रस्त होने पर हाल के सफल बताए गए बदलाव खो सकते हैं। यह सामान्य समकालिक कमिट से अलग सेटिंग है। इसलिए PostgreSQL का तेज असमकालिक परिणाम और MongoDB का अधिक कड़ी स्वीकृति वाला परिणाम समान सुरक्षा की तुलना नहीं होंगे।

प्रकाशित पठन और लेखन मापन क्या दिखाता है?

ऑनलाइन साइकिल दुकान के प्रकाशित परीक्षण में बड़े डेटा के पठन में PostgreSQL और बड़े लेखन में MongoDB आगे रहा।

काल्पनिक ऑनलाइन साइकिल दुकान पर हुए प्रकाशित अनुप्रयोग परीक्षण में १,००,००० रिकॉर्ड के पठन का औसत PostgreSQL में ०.६० और MongoDB में २.०१ सेकंड था, जबकि इतने रिकॉर्ड लिखने का औसत क्रमशः ५०.४७ और ३०.०९ सेकंड था। उसी परीक्षण में छोटे डेटा पर PostgreSQL का पठन तेज था और दोनों के लेखन समय अपेक्षाकृत करीब थे। बड़े डेटा के पठन तथा लेखन में बढ़त अलग दिशाओं में गई।

यह मापन अनुप्रयोग की परत से भेजे गए अनुरोधों का था। दोनों डेटाबेस तक पहुँचने के लिए अलग रिपॉज़िटरी तंत्र इस्तेमाल हुए; संबंध वाले प्रश्नों के लिए PostgreSQL में जोड़ने वाली क्वेरी और MongoDB में संग्रह जोड़ने की प्रक्रिया चली। डेटा, क्वेरी और अनुप्रयोग को साथ लेकर देखे गए परिणाम को डेटाबेस इंजन की अकेली गति समझना उचित नहीं। साइकिल दुकान का डेटा भी अध्ययन के लिए बनाया गया था, इसलिए उसका अनुपात किसी भारतीय अनुप्रयोग के वास्तविक अनुरोधों का प्रतिनिधित्व अपने आप नहीं करता।

परीक्षण में रिकॉर्ड पढ़ने और जोड़ने का समय उपयोगी है, लेकिन अलग दस्तावेज़ों पर निर्भर बदलावों के साझा कमिट की तुलनीय अवधि उसमें नहीं दी गई। यही वजह है कि MongoDB की बड़े लेखन में बढ़त लेन-देन वाले आदेश या भुगतान अनुरोध की बढ़त सिद्ध नहीं करती। उसमें आवश्यक दस्तावेज़ों की संख्या, पठन की संगति, स्वीकृति और दुर्घटना के बाद डेटा बचने की शर्त जोड़ते ही मापा जाने वाला काम बदल जाता है। क्रम भी बदल सकता है; उसकी दिशा वास्तविक कार्यभार से ही तय होगी।

कार्यभार के अनुसार चुनाव

चयन की पहली शाखा डेटा की सीमा है। यदि अधिकांश अनुरोध एक ही दस्तावेज़ में समाते हैं और उसी रूप में पढ़े जाते हैं, तो MongoDB का दस्तावेज़ मॉडल मजबूत उम्मीदवार है। यदि आदेश, खाता और स्टॉक जैसे स्वतंत्र रिकॉर्ड नियमित रूप से साथ बदलते हैं तथा उनके संबंधों पर प्रश्न पूछे जाते हैं, तो PostgreSQL उपयोगी शुरुआती विकल्प है। दोनों स्थितियों में दूसरे डेटाबेस को बाहर करने का कारण उसका नाम नहीं, अपने कार्यभार पर मिलने वाला परिणाम होना चाहिए।

दूसरी शाखा कमिट की शर्त है। सफलता लौटने के बाद बदलाव का खोना अस्वीकार्य हो, तो मापन में उसी अनुरूप टिकाऊपन और प्रतिकृति स्वीकृति रखनी होगी। हल्की स्वीकृति पर मिली कम विलंबता को कड़ी स्वीकृति वाले अनुरोध का लाभ नहीं माना जा सकता। भारी मात्रा में स्वतंत्र रिकॉर्ड जोड़ने वाली प्रणाली में प्रकाशित MongoDB लेखन परिणाम एक उपयोगी संकेत है; संबंधित रिकॉर्ड पढ़ने और उन्हें साथ बदलने वाली प्रणाली में वही संख्या निर्णय का केंद्र नहीं बनती।

निर्णायक इकाई पूरा उपयोगकर्ता अनुरोध है: आवश्यक डेटा पढ़ना, सभी निर्भर बदलाव करना और तय सुरक्षा शर्त के साथ कमिट लौटाना। उसी इकाई पर पठन तथा लेखन का अनुपात, डेटा की बढ़ती मात्रा और विफलता की अपेक्षा साफ हों, तो PostgreSQL और MongoDB की तुलना वास्तविक वास्तुकला निर्णय बनती है।

यह भी पढ़ें:

साझा करें:

हमारे न्यूज़लेटर की सदस्यता लें

Web3, AI और क्रिप्टो की नवीनतम खबरें सीधे अपने इनबॉक्स में पाएँ।

0