एक डेवलपर को डायरेक्ट कनेक्शन के बजाय db पर वेब सेवाओं का उपयोग क्यों करना चाहिए? [बन्द है]


93

मैं उन कारणों की एक "शीर्ष दस" सूची की तलाश कर रहा हूं, जिनकी वजह से हमें db से सीधे जुड़ने के बजाय वेब सेवा के माध्यम से दूरस्थ डेटाबेस से जुड़ना चाहिए। यह अभी एक आंतरिक बहस है और मैं प्रो-वेब सेवा हूं लेकिन तर्क खो रहा हूं। मेरे पास WCF / वेब सेवाओं की एक बुनियादी समझ है, कोई और नहीं करता है। हम जो कुछ भी करना चाहते हैं उसे आगे बढ़ा सकते हैं लेकिन हमें अब जो भी चुनना है उसके साथ रहना होगा।

यहाँ मैं के साथ आया हूँ। कोई और?

  1. यदि सही तरीके से कॉन्फ़िगर किया गया हो, तो WCF वेब सेवाएँ अधिक सुरक्षित हो सकती हैं।
  2. DB में परिवर्तन केवल सेवा स्तर पर किए जाने की आवश्यकता है (config फ़ाइल या recompile सेवा)।
  3. एक बार सेटअप और होस्ट करने के बाद, वेब सेवाओं का उपभोग करना आसान हो जाता है।

जवाबों:


120
  1. सुरक्षा। आप वेब सर्वर / ऐप उपयोगकर्ता के लिए किसी को भी डीबी एक्सेस नहीं दे रहे हैं।

    जब आप उपयोगकर्ताओं के टन है यह अतिरिक्त महत्वपूर्ण है। आप DB की तरफ उपयोगकर्ता / भूमिका रखरखाव के दर्द से बचते हैं।

  2. डीबी लोड में कमी। वेब सेवा DB से प्राप्त डेटा को कैश कर सकती है।

  3. डेटाबेस कनेक्शन पूलिंग (हैट / टिप @ डॉग्स)।

    एक वेब सेवा स्थायी रूप से खोले गए डीबी कनेक्शनों के एक छोटे से पूल का उपयोग कर सकती है। विभिन्न तरीकों से मदद करता है:

    • DB कनेक्शन पूल डेटाबेस सर्वर साइड पर सीमित है।

    • एक नया DB कनेक्शन खोलना बहुत महंगा है (विशेषकर डेटाबेस सर्वर के लिए)।

  4. गलती सहिष्णुता के लिए क्षमता - सेवा उपभोक्ताओं द्वारा विफल-ओवर के कार्यान्वयन के विवरण के बिना प्राथमिक / डीआर डेटा स्रोतों के बीच स्विच कर सकती है।

  5. स्केलेबिलिटी - सेवा उपभोक्ताओं द्वारा लागू किए जाने वाले संसाधन उठा के विवरण के बिना कई समानांतर डेटा स्रोतों के बीच अनुरोध फैला सकती है।

  6. Encapsulation। आप सेवा उपयोगकर्ताओं को प्रभावित किए बिना अंतर्निहित DB कार्यान्वयन को बदल सकते हैं।

  7. डेटा संवर्धन (इसमें ग्राहक अनुकूलन से लेकर स्थानीयकरण तक कुछ भी शामिल है)। मूल रूप से इनमें से कोई भी उपयोगी हो सकता है, लेकिन उनमें से कोई भी डेटाबेस पर एक बड़ा भार है और एक DB के अंदर लागू करने के लिए अक्सर बहुत कठिन होता है।

  8. मई या आप पर लागू नहीं हो सकता है - कुछ वास्तुकला निर्णय डीबी के अनुकूल नहीं हैं। उदाहरण के लिए यूनिक्स पर चलने वाले जावा सर्वर में डेटाबेस की आसान पहुँच होती है, जबकि विंडोज पीसी पर चलने वाला जावा क्लाइंट डेटाबेस के प्रति जागरूक नहीं होता है और न ही आप संभवतः इसे चाहते हैं।

  9. पोर्टेबिलिटी। आपके ग्राहक सभी एक ही मंच / वास्तुकला / भाषा पर नहीं हो सकते हैं। वेब सर्विस के लिए कंज्यूमर लेयर बनाने की तुलना में उनमें से हर एक में एक अच्छी डेटा एक्सेस लेयर को फिर से बनाना कठिन है (क्योंकि इसमें उपरोक्त फॉलोवर्स / आदि जैसे मुद्दों को ध्यान में रखना चाहिए)।

  10. प्रदर्शन सुधारना। यह मानते हुए कि ग्राहक अपने स्वयं के प्रश्नों को चला रहे हैं (और पूर्व-संकलित संग्रहीत प्रक्रियाओं को नहीं), आप 100% सुनिश्चित हो सकते हैं कि वे इष्टतम प्रश्नों से कम का उपयोग करना शुरू कर देंगे। इसके अलावा, यदि वेब सेवा स्वीकार्य प्रश्नों के सेट को सीमित करती है, तो यह आपके डेटाबेस को महत्वपूर्ण रूप से ट्यूनिंग में मदद कर सकता है। मुझे यह जोड़ना चाहिए कि यह तर्क संग्रहीत प्रक्रियाओं पर समान रूप से लागू है, वेब सेवाओं के लिए अद्वितीय नहीं है।

इस पृष्ठ पर एक अच्छी सूची भी मिल सकती है : 'एनकैप्सुलेटिंग डेटाबेस एक्सेस: एन एजाइल "बेस्ट" प्रैक्टिस "

बस क्रिस्टल स्पष्ट होने के लिए - इनमें से कुछ मुद्दे सभी स्थितियों पर लागू नहीं हो सकते हैं। कुछ लोग पोर्टेबिलिटी की परवाह नहीं करते हैं। कुछ लोगों को डीबी सुरक्षा के बारे में चिंता करने की आवश्यकता नहीं है। कुछ लोगों को डीबी स्केलेबिलिटी के बारे में चिंता करने की जरूरत नहीं है।


26
क्षमा करें, असहमत। 1. तो आप एक प्रिंसिपल के बजाय एक समूह को डीबी एक्सेस प्रदान करते हैं - कोई अंतर नहीं। 2. कोई भी ऐप डाटा को कैश कर सकता है। जिस तरह के डेटा को कई उपयोगकर्ताओं को कैश किया जा सकता है, वह आमतौर पर किसी भी स्थिति में कम मात्रा में डेटा होगा। 3. एफटी को किसी भी मामले में डेटाबेस द्वारा नियंत्रित किया जाना चाहिए। 4. यह आउट ऑफ द बॉक्स फीचर नहीं है, और इसे प्रोग्राम किया जाना है। 5. आपकी डेटा एक्सेस लेयर एनकैप्सुलेशन कर रही होगी। 6. एक ही बात। 7. सच में? JDBC क्लाइंट में नहीं चलता है? 8. अच्छा बिंदु, जब यह मायने रखता है, जो दुर्लभ है। 9. क्वेरी बनाम एसपी सवाल का हिस्सा नहीं था।
जॉन सॉन्डर्स

7
1. कोशिश करें कि 5000 से अधिक उपयोगकर्ता भूमिकाओं के साथ हों। अब इतना अच्छा पैमाना नहीं है। 2. पूरी तरह से एक ऐप पर निर्भर करता है। हमारे वर्तमान मामले में क्वेरी के कैशिंग परिणामों का एक उदाहरण है, जो कि uber- अनुकूलित मामले को चलाने में 20 मिनट लगते हैं और जिन्हें हमें कम से कम विभिन्न एप्लिकेशन से दिन में 100 बार चलाने की आवश्यकता होती है। 3. एफटी को स्तरों के एक समूह पर संभाला जाता है। आपका क्या मतलब है "एक डेटाबेस द्वारा नियंत्रित किया जाना चाहिए"?
DVK

4
4. बेशक इसे प्रोग्राम किया जाना है। लेकिन इसे अलग-अलग क्षमताओं के साथ विभिन्न प्लेटफार्मों पर एक बार, या एक बिलियन क्लाइंट ऐप्स में सेवा में प्रोग्राम किया जा सकता है। एक बड़ा अंतर है। लोड संतुलन के लिए कॉन्फ़िगरेशन प्रबंधन के मुद्दों पर कभी ध्यान न दें। 5. एक ही तर्क। आपको DAL को फिर से लागू करने की आवश्यकता नहीं है। वास्तव में, आप केवल अपने दिमाग को कम करने के लिए एक पोर्टेबल डीएएल के रूप में वेब सेवा के बारे में सोच सकते हैं। 7. हम हर ग्राहक को DB कनेक्शन खोलना नहीं चाहते हैं। क्या इतनी बड़ी चीज़ माँगना है? फिर से, आप 1-5 अंक भूल रहे हैं।
DVK

2
8.> 1 क्लाइंट आर्किटेक्चर बहुत बार होता है। तथ्य की बात है कि मैंने अपने जीवन में ऐसी स्थिति के बिना कभी प्रोजेक्ट पर काम नहीं किया, लेकिन मैं वित्तीय दुनिया में केंद्रित हूं। 9. यह नहीं था। मैं मूल रूप से शैतान के वकील की भूमिका निभा रहा था।
डीवीके

2
मुझे यह उत्तर पसंद है, लेकिन मुझे लगता है कि आपने सबसे महत्वपूर्ण बिंदुओं में से एक को छोड़ दिया है: कनेक्शन पूलिंग। यदि आपके पास 1,000,000 ग्राहक हैं, तो आपके पास या तो 1,000,000 खुले कनेक्शन हैं, या लाखों कनेक्शन लगातार खोले और बंद किए जा रहे हैं। कंप्यूटर संगठन के बारे में बुनियादी अंतर्ज्ञान हमें एक जोड़े को लंबे समय तक रहने वाले कनेक्शन के एक अच्छी तरह से देखते पूल बताता है कि एक लाख लंबे समय तक रहने वाले या लाखों अल्पकालिक कनेक्शन होने की तुलना में खगोलविज्ञानी अधिक कुशल है। इस विचार को विस्तार देने के एक महान काम के लिए HikariCP डॉक्स: github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
कुत्तों के लिए

15

मेरी राय में, आपको अपने डेटाबेस को वेब सेवा के रूप में स्वतः उजागर नहीं करना चाहिए। यदि यह पता चलता है कि आपको अपने डेटा को उजागर करने के लिए एक सेवा की आवश्यकता है, तो एक लिखें, लेकिन वेब सेवाओं के माध्यम से सभी डेटाबेस का उपयोग नहीं किया जाना चाहिए।

  1. डेटाबेस कनेक्शन सुरक्षित नहीं होना चाहिए, इसका कोई कारण नहीं है
  2. आप डेटा एक्सेस लेयर में डेटाबेस को इनकैप्सुलेट कर सकते हैं (संभवतः एंटिटी फ्रेमवर्क)
  3. वेब सेवाओं के लिए एक अच्छी तरह से लिखित डेटा एक्सेस परत की तुलना में उपभोग करना आसान नहीं है।

एक्सएमएल जरूरी क्यों? साधारण फ्लैट डेटा, आदि के लिए JSON, CSV को पार्स करने के लिए बहुत हल्का है ...
DVK

यह "बिना किसी अच्छे कारण के" नहीं है। जैसा कि कहा गया है, भविष्य की विकास के लिए आपकी आवश्यकताओं और इच्छाओं के आधार पर, यह आपकी परियोजना के लिए आवश्यक हो सकता है।
क्रिस स्टीवर्ट

मैं अपने WS को DAL का उपभोग करने के लिए लिखता हूं। आप किस पोर्ट पर DAL को उजागर करने का सुझाव देंगे?
सामिस

@samus इससे कोई फर्क नहीं पड़ता।
जॉन सॉन्डर्स

"कोई कारण नहीं है कि डेटाबेस कनेक्शन सुरक्षित नहीं होना चाहिए", ठीक है, उदाहरण के लिए विंडोज क्लाइंट और डेटाबेस के बीच कनेक्शन को सुरक्षित करना मुश्किल है। एक सुरक्षित कनेक्शन को लागू करना वास्तव में मुश्किल है!
NoChance

12
  • बाहरी सेवाओं और अनुप्रयोग के डेटा के बीच अनुमत अंतःक्रियाओं को परिभाषित करते हुए वेब सेवाएँ एक एपीआई बनाती हैं।
  • वेब सेवाएँ बाहरी इंटरैक्शन से डेटाबेस को हटा देती हैं और डेटा लेयर को उन बाहरी प्रभावों से स्वतंत्र रूप से प्रबंधित करने में सक्षम बनाती हैं।
  • केवल वेब सेवाओं द्वारा पहुंच की अनुमति देने से यह सुनिश्चित होता है कि एप्लिकेशन तर्क को डेटा अखंडता की रक्षा करने, निष्पादित करने का मौका मिलता है।
  • वेब सेवाएँ एक उपयोगकर्ता नाम और पासवर्ड / टेबल स्तर विशेषाधिकारों की आवश्यकता वाले डेटाबेस के विपरीत, सबसे उपयुक्त प्रमाणीकरण / प्राधिकरण उपायों को लेने की अनुमति देती हैं।
  • वेब सेवा स्वचालित सेवा की खोज और विन्यास के लिए एक अवसर प्रदान करती है।
  • असुरक्षित नेटवर्क पर पारगमन के लिए वेब सेवा यातायात को एन्क्रिप्ट किया जा सकता है। किसी भी प्रत्यक्ष DB कनेक्शन समाधान के बारे में पता नहीं है जो इसे सक्षम करता है ...?

इनमें से अधिकांश बिंदु किसी भी औपचारिक एपीआई के लिए जाते हैं, विशेष रूप से वेब सेवाओं के लिए नहीं।


1
हाँ, यह वही था जो मैं कहने जा रहा था, यदि आपके पास डेटाबेस तक पहुँचने वाला एक भी आवेदन है, तो आपके सभी बिंदु सामान्य एपीआई के लिए भी उपलब्ध हैं।
इग्नासियो सोलर गार्सिया

"वेब सेवाएँ एक एपीआई बनाती हैं, जो बाहरी प्रणालियों और अनुप्रयोग के डेटा के बीच अनुमत अंतःक्रियाओं को परिभाषित करती है।" आप एक डेटाबेस के साथ भी ऐसा कर सकते हैं।
जूता

"केवल वेब सेवाओं द्वारा पहुंच की अनुमति देने से यह सुनिश्चित होता है कि एप्लिकेशन तर्क को डेटा अखंडता की रक्षा करने, निष्पादित करने का मौका मिलता है।" - मेरा तर्क है कि डेटा अखंडता केवल डीबीएमएस का हिस्सा होना चाहिए।
जूता

@ शोहे, डीबी द्वारा जितना संभव हो उतना अखंडता लागू करना अच्छा है, लेकिन जैसा कि डेटा आबादी और कमियों को उजागर करना शुरू कर देता है, जैसे कुछ इनपुट सत्यापन की आवश्यकता है, यह आवेदन स्तर पर इसे लागू करना अच्छा है (हालांकि मैं एक के लिए पसंद कर रहा हूं क्लाइंट पक्ष, इसे कभी-कभी सर्वर साइड से निपटना पड़ता है यदि सत्यापन नियम केवल सर्वर पर ज्ञात डेटा (क्लाइंट ऐप से रखे गए) पर निर्भर होते हैं। क्या डीबी के अखंडता नियम को बदलना एक बड़ी बात है, मुझे लगता है कि यह एक मामूली बात नहीं है?
समीस

2

एक वेब सेवा लिखना जो केवल संग्रहीत प्रक्रियाओं के लिए कॉल को लपेटता है, एक अच्छा डीएएल को डिजाइन करने के लिए एक गुमराह दृष्टिकोण प्रतीत होता है। संभावना से अधिक, आपकी संग्रहीत प्रक्रियाएं एक पुराने क्लाइंट-सर्वर सिस्टम से लीगेसी कोड होती हैं अर्थात व्यावसायिक नियम SPs में दफन हो जाते हैं। अगर ऐसा है, तो आप वास्तव में प्रयास कर रहे हैं कि एक बोने के कान से रेशम का पर्स बना रहे हैं।

इसके अलावा, आपके SOAP संदेश प्रोटोकॉल लेयर को जोड़ने से उन वेब ऐप्स में एक प्रदर्शन हिट जुड़ जाता है, जो इस 'सुअर' के साथ 'ज़बरदस्ती' करते हैं। मैं अभी एक प्रोजेक्ट पर काम कर रहा हूं, जहां हमारे नए MVC-4 ऐप को ऐसे DAL का उपयोग करने का निर्देश दिया गया है। जब भी कोई नया उपयोगकर्ता कहानी ऐसे बदलावों की आवश्यकता के साथ आता है, तो हमारे पास WebMethod हस्ताक्षर और SP हस्ताक्षर दोनों को बदलने का भार होता है; जो हमारे लिए, हर एक स्प्रिंट है। ऐसे पश्तो दृष्टिकोण में निहित दो कसकर युग्मित स्तरों है।


1
वेब एपीआई ने डब्ल्यूसीएफ / एसओएपी ब्लोट मुद्दे को संबोधित किया। यह अब एक प्रकाश, फिट, चुस्त बिल्ली के समान है; बस इसे सेवा की आवश्यकता है।
समीस

सिद्धांत रूप में, वेब सेवाओं का उपयोग करके संग्रहित प्रोक्स को कॉल करना गलत नहीं है।
NoChance

2

1) डेटाबेस को बनाए रखने का सिरदर्द डेवलपर्स की तरफ से कम किया जाता है ताकि वे केवल विकास पर ध्यान केंद्रित कर सकें।

2) वेब सेवा बहुत आसान और प्रभावी तरीके से विभिन्न प्लेटफार्मों (विंडोज़, आईओएस, एंड्रॉइड आदि जैसे ऑपरेटिंग सिस्टम) के संचार का समर्थन करती है। उदाहरण के लिए एक स्थिति पर विचार करें जब एंड्रॉइड एप्लिकेशन और आईओएस एप्लिकेशन एक वेबसाइट पर संचार करना चाहता है जो जावा आधारित है इसलिए तीनों डेटाबेसों को मुख्य करने के बजाय सभी तीन चीजों के संचार के लिए वेबबेस सेवा सबसे अच्छा समाधान है।


1

सामान्य रूप में

  1. वेब सेवा स्तर कई अनुप्रयोगों के लिए आम डेटा अनुरोधों के पुन: उपयोग को बढ़ावा देता है
  2. वेब सेवा को संस्करण प्रबंधन के साथ स्थापित किया जा सकता है जो अनुप्रयोग स्तर के विकास से उत्पन्न कई मुद्दों को दर्शाता है। उदाहरण के लिए, यदि मैं एक ऐसी परियोजना के लिए नया हूं, जो मौजूदा एप्लिकेशन मैं मौजूदा डेटाबेस स्रोतों का उपयोग करने के लिए अपने एप्लिकेशन को कॉन्फ़िगर करने के लिए एक अच्छे मॉडल के रूप में उपयोग करता हूं।
  3. वेब सेवा अनुरोध भेजने और प्रतिक्रिया परिणाम प्राप्त करने के लिए लचीले विकल्पों की अनुमति देने के लिए विकसित हुई है, जैसे JSON में एक साधारण URI का उपयोग करके एक सामान्य प्रारूप में जिसका अर्थ है कि क्लाइंट अनुप्रयोगों को एक अधिक सामान्य मानक का उपयोग करके विकसित किया जा सकता है जो भरोसेमंद समान इंटरफेस को प्रोत्साहित करता है।

मैं सिर्फ ASP.NET वेब एप से घूर रहा हूं और सबसे पहले डेटा सर्विस बनाने की योजना बना रहा हूं।

मैं हाल ही में .NET MVC वेब अनुप्रयोगों पर इकाई ढांचे के उपयोग पर ध्यान केंद्रित कर रहा हूं।

  1. यदि आप पहले से ही MVC का उपयोग करते हैं तो वेब Api भी Api कंट्रोलर के साथ MVC का उपयोग करता है इसलिए सेवाओं के निर्माण के लिए सीखने की अवस्था काफी दर्द रहित होती है।

मैंने हाल ही में खुद को एक एमवीसी वेब ऐप के साथ एक निराशाजनक भविष्यवाणी में पाया है कि मैं मूल रूप से ओरेकल स्टोर की गई प्रक्रियाओं पर आधारित था। ओरेकल 9 या उससे पहले का मूल संस्करण, जिसने विजुअल स्टूडियो 2012 के साथ एक और समस्या पेश की, वेब कॉन्फ़िगरेशन कनेक्शन और टीएनएस नामों के आधार पर उपयोग करने के लिए सही dll फ़ाइलों को खोजने के लिए लोड टाइम असेंबली के साथ एक और आधुनिक कनेक्शन फैक्टरी दृष्टिकोण को आगे बढ़ाता है।

डेटाबेस से जुड़ने का प्रयास 'अब समर्थित नहीं' त्रुटि संदेशों के साथ विफल हो गया। जिज्ञासा से बाहर मैंने ओरेकल 12 सी डाउनलोड किया और कुछ आवेदन स्तर के कनेक्शन किए जो कि मेरे टीएनएस नामों और लोड असेंबली डीएल के साथ अच्छी तरह से काम करते थे और मैं ओरेकल के साथ काम करने में सक्षम था।

कुछ वेब सेवाएं निर्मित थीं जो पुराने ओरेकल संस्करण के कनेक्शन के साथ काम कर रही थीं। वे उन तरीकों से बनाए गए थे जो विशेष रूप से मेरी निराशा के लिए चयनित तालिकाओं में मैप किए गए थे। मुझे अपना लिखना होगा।

मुझे बताया गया था कि जो समूह ओरेकल डेटाबेस को बनाए रखने के लिए जिम्मेदार था कि वे पुराने संग्रहीत को बदलने के लिए नई संग्रहीत कार्यविधियाँ लिखेंगे जिन्हें मैं ग्राहक इंटरफ़ेस और व्यावसायिक तर्क परतों को सार करने के लिए उपयोग कर रहा था।

तो मेरा पहला विचार यह था कि सभी सामान्य डेटा अनुरोध जैसे कि ड्रॉप डाउन सूची भरना या ऑटो वाइड के साथ पूरा होता है डेटा को सेवाओं के माध्यम से पूरा किया जाता है जो कि ओरेकल संग्रहित प्रक्रियाओं को कहते हैं। क्यों प्रत्येक आवेदन पर उस प्रक्रिया को दोहराएं और प्रत्येक डेवलपर को कॉन्फ़िगरेशन और संस्करण / लोड असेंबली, टीएनएस मुद्दों के साथ संघर्ष करना चाहिए?

इसलिए....

  1. एकाधिक डेटाबेस सर्वर समस्याओं के लिए जैसे कि .NET MVC एप्लिकेशन में Oracle संग्रहीत कार्यविधियों का उपयोग करना जो कि SQL सर्वर डेटा उपयोग के लिए आमतौर पर EF का उपयोग कर सकते हैं, उन सिरदर्द को वेब Api सेवा विधियों तक नहीं धकेल सकते हैं जहां उन कॉन्फ़िगरेशन समस्याओं को अलग किया जा सकता है।
  2. फिर से क्लाइंट इंटरफेसिंग जावास्क्रिप्ट, JQuery और JSON का उपयोग करके किया जा सकता है जो आप पहले से उपयोग कर रहे हैं यदि आप SQL सर्वर डेटा अनुरोध बनाने के लिए वेब एप का उपयोग कर रहे हैं।

मैं एक एप्लिकेशन डेवलपर / विश्लेषक हूं और डीबीए नहीं हूं, इसलिए मेरा दृष्टिकोण अनुभव से एक है जो डेटाबेस टूल विकसित होने पर लगातार अनुप्रयोगों को संशोधित करने की निराशा को समाप्त नहीं करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.