आप सोचते हैं JDBC के साथ इसे करना आसान और तेज़ है क्योंकि आप फ़ोन और पोर्टेबल डिवाइस के वास्तविक विश्व ऑपरेटिंग वातावरण पर विचार नहीं कर रहे हैं। उनके पास अक्सर बग्गी ट्रैफिक रीराइटिंग प्रॉक्सी और पागल फायरवॉल के माध्यम से परतदार कनेक्टिविटी होती है। वे आम तौर पर एक नेटवर्क ट्रांसपोर्ट लेयर का उपयोग कर रहे हैं जिसमें उच्च और परिवर्तनीय पैकेट हानि दर और विलंबताएं हैं जो कम समय में परिमाण के कई आदेशों में भिन्न होती हैं। टीसीपी वास्तव में इस माहौल में बहुत अच्छा नहीं है और विशेष रूप से लंबे समय तक चलने वाले कनेक्शन के साथ संघर्ष करता है।
वेब सेवा का मुख्य लाभ यह है कि:
-
कम से कम स्थिति के साथ अल्पकालिक कनेक्शन हैं, इसलिए जब आप डिवाइस से वाईफाई नेटवर्क स्विच करते हैं, सेलुलर से/से, कनेक्टिविटी को संक्षिप्त रूप से खो देते हैं, तो आप जहां थे, वहां वापस जाना आसान है; और
-
सबसे भयानक और कठोर वेब प्रॉक्सी को छोड़कर सभी से गुजर सकता है
आप नियमित रूप से करेंगे सीधे JDBC कनेक्शन के साथ समस्याओं का सामना करना पड़ता है। एक चुनौती मज़बूती से मृत कनेक्शनों को समयबद्ध करना, सत्रों को फिर से स्थापित करना और पुराने सत्र द्वारा आयोजित ताले को जारी करना है (क्योंकि सर्वर यह तय नहीं कर सकता है कि क्लाइंट उसी समय मर चुका है)। एक और पैकेट हानि है जिसके कारण बहुत धीमी गति से संचालन, लंबे समय तक चलने वाले डेटाबेस लेनदेन, और लॉक अवधि और लेनदेन संबंधी सफाई कार्यों के साथ परिणामी समस्याएं होती हैं। आप सूरज के नीचे हर तरह के पागल और टूटे हुए प्रॉक्सी और फ़ायरवॉल से भी मिलेंगे - प्रॉक्सी जो CONNECT
का समर्थन करते हैं लेकिन फिर मान लें कि सभी ट्रैफ़िक HTTP हैं और यदि ऐसा नहीं है तो इसे प्रबंधित करें; बग्गी स्टेटफुल कनेक्शन ट्रैकिंग के साथ फायरवॉल जो कनेक्शन को विफल करने या आधे-खुले ज़ोंबी राज्य में जाने का कारण बनता है; हर NAT समस्या जिसकी आप कल्पना कर सकते हैं; विलंबता को कम करने के लिए टीसीपी एसीके उत्पन्न करने वाले "मददगार" वाहक, पैकेट हानि की खोज और विंडो आकार के कारण होने वाली समस्याओं पर कभी ध्यान नहीं देते; निराला बंदरगाह अवरुद्ध; आदि.
क्योंकि हर कोई HTTP का उपयोग करता है, आप उम्मीद कर सकते हैं कि काम करने के लिए - कम से कम, किसी भी चीज़ की तुलना में बहुत अधिक बार। यह अब विशेष रूप से सच है कि सामान्य वेबसाइटें मोबाइल वेब ऐप्स में भी REST+JSON संचार शैली का उपयोग करती हैं।
आप बेवकूफ . होने के लिए अपनी वेब सेवा कॉल भी लिख सकते हैं अद्वितीय अनुरोध टोकन का उपयोग करना। यह आपके ऐप को बिना किसी डर के संशोधन अनुरोध फिर से भेजने देता है कि यह डेटाबेस के खिलाफ दो बार कार्रवाई करेगा। देखें idempotence और idempotence को परिभाषित करना ।
गंभीरता से, मोबाइल डिवाइस से JDBC अब एक अच्छे विचार की तरह लग सकता है - लेकिन जिस तरह से मैं इस पर भी विचार करूंगा, वह यह होगा कि अगर मोबाइल डिवाइस मेरे सीधे नियंत्रण में एक ही उच्च-विश्वसनीय वाईफाई नेटवर्क पर हों। फिर भी यदि मैं संभवतः कर सकता हूं तो मैं डेटाबेस प्रदर्शन प्रबंधन के कारणों से बचूंगा। आप सर्वर साइड पर कई उपकरणों के बीच पूल कनेक्शन के लिए PgBouncer जैसे कुछ का उपयोग कर सकते हैं, इसलिए कनेक्शन पूलिंग एक बड़ी समस्या नहीं है, लेकिन खोए और छोड़े गए कनेक्शन की सफाई है, जैसा कि टीसीपी रखरखाव यातायात को काम करने के लिए आवश्यक है और लंबे समय तक रुका हुआ है परित्यक्त कनेक्शन से लेनदेन।