कनेक्शन पूलिंग कैसे करें
प्रत्येक प्लेटफ़ॉर्म में एक अलग कनेक्शन पूलिंग इंटरफ़ेस होता है। आपको अपने द्वारा उपयोग किए जाने वाले विशिष्ट प्लेटफ़ॉर्म (रूबी + रेल या जो कुछ भी) के लिए दस्तावेज़ीकरण पढ़ना होगा, या PgBouncer जैसे सामान्य पूलिंग मिडलेयर का उपयोग करना होगा।
एक टूल से संबंधित उत्तर (जैसे, Zend फ्रेमवर्क के साथ PHP) का किसी अन्य टूल (जैसे रूबी ऑन रेल्स) से संबंधित उत्तरों से कोई लेना-देना नहीं होगा। यहां तक कि अगर आप PgBouncer जैसी कोई चीज़ चुनते हैं, तब भी इस बात से संबंधित विवरण हैं कि प्लेटफ़ॉर्म लेन-देन के जीवनकाल को कैसे संभालता है, ऐप की ज़रूरतों के आधार पर चुनने के लिए पूलिंग मोड, आदि।
इसलिए आपको पहले यह निर्धारित करना होगा कि आप क्या उपयोग कर रहे हैं और आपको इसके साथ क्या करने की आवश्यकता है। फिर इसका कनेक्शन पूलिंग कैसे सेट करें, इसका अध्ययन करें। (कई उपकरणों के साथ यह बस स्वचालित है)।
यदि आप आपके द्वारा चुने गए प्लेटफ़ॉर्म के लिए दस्तावेज़ पढ़ने के बाद भी अटके हुए हैं , एक नया विस्तृत और विशिष्ट पूछें मंच के लिए उचित रूप से टैग किया गया प्रश्न।
पूलिंग और मिडलवेयर
अपने ऐप को सीधे PostgreSQL से कनेक्ट न करें। विशेष रूप से अगर यह यादृच्छिक ग्राहकों से इंटरनेट पर है।
पोस्टग्रेएसक्यूएल सर्वर के पास एक वेब सर्वर का उपयोग करें और इसे एक अच्छी तरह से परिभाषित वेब एपीआई के माध्यम से डेटाबेस तक ब्रोकर एक्सेस के लिए वेब सेवा अनुरोध स्वीकार करें, जिसमें छोटे लेनदेन के साथ जितना संभव हो सके अनुरोध करने के लिए गुंजाइश है।
यह केवल प्राप्त ज्ञान का मामला नहीं है - ऐसा करने के अच्छे कारण हैं, और इंटरनेट पर यादृच्छिक उपकरणों से PostgreSQL चलाने में गंभीर समस्याएं हैं।
एंड्रॉइड ऐप सीधे Pg से बात कर रहा है
कई क्लाइंट्स से सीधे इंटरनेट पर Pg से बात करने में आने वाली समस्याओं में शामिल हैं:
-
प्रत्येक PostgreSQL बैकएंड की एक लागत होती है, चाहे वह निष्क्रिय हो या नहीं। लेन-देन पूलिंग मोड में PgBouncer कुछ हद तक इसमें मदद करता है।
-
जब आप इंटरनेट पर काम कर रहे होते हैं तो कनेक्शन बेतरतीब ढंग से खो जाते हैं। वाईफाई ड्रॉप्स, डायनेमिक आईपी सेवाओं पर आईपी एड्रेस में बदलाव, मोबाइल सेवा जो फीकी या क्षमता में अधिकतम हो जाती है या वहां उच्च पैकेट नुकसान के साथ बस डगमगाती है। यह आपको अनिश्चित स्थितियों में बहुत सारे PostgreSQL कनेक्शन देता है, शायद खुले लेनदेन के साथ, आपको
<IDLE> in transaction
देता है मुद्दों और वास्तव में काम करने की तुलना में बहुत अधिक कनेक्शन की अनुमति देने की आवश्यकता है। -
यह लेन-देन संबंधी है - यदि कुछ समाप्त नहीं होता है तो आप लेन-देन को समाप्त कर सकते हैं और जान सकते हैं कि इसका कोई प्रभाव नहीं पड़ेगा।
मध्य परत होने के लाभ
डेटाबेस एक्सेस के लिए ब्रोकर के रूप में कार्य करने के लिए एंड्रॉइड डिवाइस पर आपके ऐप से HTTP वेब सेवा अनुरोधों का जवाब देने वाला सर्वर एक बड़ा फायदा हो सकता है।
-
आप एक संस्करण वाले एपीआई को परिभाषित कर सकते हैं, इसलिए जब आप नई सुविधाओं को पेश करते हैं या एपीआई को बदलने की आवश्यकता होती है तो आपको पुराने क्लाइंट को तोड़ने की ज़रूरत नहीं है। संग्रहीत प्रक्रियाओं या बहुत सारे विचारों का उपयोग करके पीजी के साथ यह संभव है लेकिन यह अस्पष्ट हो सकता है।
-
आप डेटाबेस एक्सेस और ट्रांजैक्शन लाइफटाइम के दायरे को सख्ती से नियंत्रित करते हैं।
-
आप एक बेवकूफ एपीआई को परिभाषित कर सकते हैं, जहां एक ही अनुरोध को कई बार चलाने से केवल एक ही प्रभाव पड़ता है। (मैं अगले बिंदु के कारण ऐसा करने की दृढ़ता से अनुशंसा करता हूं)।
-
सब कुछ स्टेटलेस है और इसमें कम टाइम-आउट हो सकता है। अगर कुछ काम नहीं करता है तो आप इसे पुनः प्रयास करें।
-
प्रत्येक डेटाबेस कनेक्शन पूल के माध्यम से जाता है, इसलिए आपके पास बेकार सत्र नहीं बैठे हैं। प्रत्येक डेटाबेस बैकएंड अधिकतम थ्रूपुट के लिए कड़ी मेहनत कर रहा है।
-
आप समवर्ती रूप से टन करने और सर्वर को थ्रैश करने की कोशिश करने के बजाय काम को कतारबद्ध कर सकते हैं। (आप लेनदेन पूलिंग मोड में PgBouncer के साथ भी ऐसा कर सकते हैं)।
... और प्रश्न का अर्थ बदलने के लिए अपना संपादन दोबारा करें:
प्रदर्शन
आपका "भी" पुनः प्रदर्शन वास्तव में एक बिल्कुल अलग प्रश्न है (और अधिमानतः इस तरह पोस्ट किया जाना चाहिए)। बहुत छोटा संस्करण:वर्कलोड पर बहुत अधिक जानकारी के बिना भविष्यवाणी करना पूरी तरह असंभव है, जैसे प्रति क्लाइंट ऐप अनुरोध डीबी अनुरोधों की संख्या, डेटा का प्रकार, प्रश्नों का प्रकार, डेटा का आकार, प्रश्नों की आवृत्ति, कैशिंग की व्यावहारिकता, .. .... अंतहीन। जो कोई भी निश्चित रूप से उस प्रश्न का उत्तर देने का दावा करता है, वह या तो इतिहास का पहला सच्चा मानसिक है या पूरी तरह से भरा हुआ है।
आपको मोटे तौर पर यह पता लगाने की जरूरत है कि आपका डेटा आकार, क्वेरी पैटर्न आदि क्या होगा। यह पता लगाएं कि आप रेडिस/मेमकैच्ड जैसे मिडलेयर कैश में कितना कैश कर सकते हैं, आप इसे कितना पुराना कर सकते हैं, आपको किस स्तर के कैश अमान्यकरण की आवश्यकता है। निर्धारित करें कि आपका "हॉट" डेटासेट (जिसे आप बहुत एक्सेस करते हैं) रैम में फिट होगा या नहीं। निर्धारित करें कि बार-बार पूछे जाने वाले टेबल के इंडेक्स रैम में फिट होंगे या नहीं। पता लगाएँ कि आपका रफ़ रीड/राइट बैलेंस कितना है और आपके राइट्स के केवल-इन्सर्ट (संलग्न) या अधिक नियमित OLTP (इन्सर्ट/अपडेट/डिलीट) होने की संभावना है। डेटा सेट और कुछ क्लाइंट वर्कलोड को डमी अप करें। फिर आप उस प्रश्न का उत्तर देना शुरू कर सकते हैं - हो सकता है। इसे सही तरीके से करने के लिए आपको रुके हुए/गायब क्लाइंट आदि का अनुकरण भी करना होगा।
देखें कि यह केवल "भी?" क्यों नहीं है।