2009-06-25 4 views
6

मैं एक जावा डेस्कटॉप क्लाइंट एप्लिकेशन लिख रहा हूं जो दूरस्थ MySQL सर्वर से डेटा पुनर्प्राप्त करता है। विकास उद्देश्यों के लिए मैंने इसे सीधे MySQL सर्वर से कनेक्ट किया है (यानी DriverManager.getConnection (DatabaseURL) आदि के साथ), लेकिन एक वेब सेवा (एक बार बनाया गया था) का उपयोग करने के लिए आगे बढ़ने का इरादा रख रहा है। मेरा सवाल यह है कि क्या मैं सीधे सीधा कनेक्शन जारी नहीं रख सकता था?क्या डेस्कटॉप क्लाइंट को सीधे MySQL से कनेक्ट करना समझदारी है?

मुझे लिखने के लिए और अधिक कोड देने के लिए वेब सेवा क्या होगी? मुझे अपना खुद का प्रमाणीकरण लागू करना होगा; MySQL पर भरोसा करने में क्या गलत है?

(मैं इस सवाल को नकारात्मक में बल्कि वाक्यांश में पढ़ रहा हूं, क्योंकि मुझे यह विचार मिलता है कि यह प्रतिमान कुछ दिनों में कुछ हद तक डूब गया है, यही कारण है कि मैं इसे पूछ रहा हूं, क्योंकि ऐसा लगता है कि यह पूरी तरह से ठीक है करने के लिए काम।)

किसी भी अंतर्दृष्टि के लिए धन्यवाद जो आप मुझे दे सकते हैं!

उत्तर

2

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

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

3

कई कारणों से (किसी विशेष क्रम में): बस एक ही स्थान पर

  • बदलें व्यापार तर्क, डेटाबेस स्कीमा परिवर्तन (बस सेवा) ग्राहकों पर कोई प्रभाव नहीं
  • MySQLs प्राधिकरण प्रणाली बल्कि मोटे
  • अधिक सुरक्षित है, क्योंकि आप अपने डीबी बाहर की दुनिया
  • वेब सेवाओं standart HTTP पोर्ट के माध्यम से संचालित करने के लिए, फायरवॉल
  • कोई ज़रूरत नहीं टी के साथ कम मुसीबत खोलने की जरूरत नहीं है o ओडीबीसी ड्राइवर स्थापित करें

बेशक, वेब सेवाएं सार्वभौमिक पैनसिया नहीं हैं। उपर्युक्त में से कुछ आपके विशेष परिदृश्य में लागू नहीं हो सकते हैं, जो आपके लिए सबसे अच्छा है इसका उपयोग करें।

0

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

0

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

तो मूल रूप से, वेब सेवा आपको क्या करने देती है उपयोगकर्ता से कुछ शक्ति लेती है। शक्ति जो उन्हें इस मामले में जरूरत नहीं है। जब तक कि ग्राहक निश्चित रूप से अपना स्वयं का डेटाबेस सर्वर चलाते हैं, लेकिन यह पूरी तरह से एक अलग वातावरण है। (यदि वे अपने स्वयं के डीबी को दुर्घटनाग्रस्त करना चाहते हैं, तो यह उनका व्यवसाय है)

+0

हां, यह एक बड़ी समस्या प्रतीत होता है, लेकिन मुझे लगा कि मैं ग्राहकों को उचित संग्रहित प्रक्रियाओं तक पहुंच प्रतिबंधित कर सकता हूं और सभी ठीक होंगे। शायद इसके लिए और भी कुछ है। –

+0

ऐप के अंदर उपयोगकर्ता नाम/पास के साथ कनेक्शन स्ट्रिंग को एम्बेड क्यों नहीं करें? इस तरह ऐप के पास डेटाबेस तक पूर्ण पहुंच है, लेकिन वास्तविक उपयोगकर्ता अभी भी लॉगिन प्रमाण-पत्र नहीं जानता है। जाहिर है, आप ऐप कोड को नियंत्रित करते हैं, तो चिंता कहां है? – JoeCool

+0

@ जॉयकूल हमलावर के लिए, क्रेडेंशियल्स ढूंढना अनपॅक किए गए जार पर 'स्ट्रिंग्स' चलाने जैसा आसान है। आप इसके समाधान का प्रस्ताव दे सकते हैं, लेकिन उन सभी में एक ही मूल समस्या है जो डीआरएम है, अर्थात् किसी बिंदु पर आपको उपयोगकर्ता सिस्टम पर उपयोगकर्ता लॉग इन को क्लीयरक्स्ट में प्राप्त करने की आवश्यकता है। उपयोगकर्ता उस सिस्टम को नियंत्रित करता है, ताकि वे उनको प्राप्त कर सकें। यह सब एक बड़ी समस्या नहीं है यदि आपका ऐप अपने पूरे जीवनकाल में 3 कर्मचारियों द्वारा उपयोग की जाने वाली कुछ चीजें हैं, इसलिए जब आप वास्तव में इसे कई लोगों को वितरित करते हैं, जिनमें से कुछ आपको बहुत पसंद नहीं करते हैं। – wds

0

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

प्लस यदि आपको किसी भी तरह से अपनी टेबल बदलने की ज़रूरत है, तो आपको क्लाइंट द्वारा आपके प्रश्न जेनरेट किए जाने पर, केवल वेब सेवा अपडेट करने के बजाय अपने क्लाइंट एप्लिकेशन अपडेट करना होगा।

0

उत्तर से अधिक प्रश्न, 2 दृष्टिकोणों के बीच गति प्रभाव क्या हैं? यानी mysql से सीधा कनेक्शन या वेब सेवा का उपयोग

संबंधित मुद्दे