2011-06-08 8 views
5

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

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

  2. सर्वर पर इन प्रश्नों में से एक बार सैकड़ों (या संभवतः हजारों) भी हो सकते हैं।

  3. चूंकि प्रत्येक क्वेरी अपने स्वयं के थ्रेड में चलती है, इसलिए प्रत्येक क्वेरी को कम से कम अपने वक्तव्य की आवश्यकता होगी (और इसका अपना कनेक्शन हो सकता है)।

अभी, सर्वर डेटाबेस में एक कनेक्शन बनाने के लिए स्थापित है, और फिर प्रत्येक क्वेरी के लिए एक नया स्टेटमेंट बनाएं। कुछ डेटाबेस अनुभव (विशेष रूप से MySQL, क्योंकि यह एक MySQL डेटाबेस है) के साथ आपके प्रश्न हैं:

ए) क्या यह एक कनेक्शन से प्रति थ्रेड एक स्टेटमेंट बनाने के लिए सुरक्षित है? जो मैं समझता हूं उससे, सिर्फ पुष्टि की तलाश है।

बी) क्या एकाधिक धागे के लिए एक एकल तैयार चरण का उपयोग करने के लिए कोई धागा सुरक्षित तरीका है? ये प्रश्न सभी बहुत समान होंगे, और चूंकि प्रत्येक थ्रेड केवल एक प्रश्न निष्पादित करेगा और फिर वापस आ जाएगा, यह आदर्श होगा।

सी) क्या मुझे प्रत्येक थ्रेड के लिए एक नया कनेक्शन बनाना चाहिए, या क्या यह एक ही कनेक्शन से नए स्टेटमेंट्स को बेहतर बनाना बेहतर है? मुझे लगता है कि एक कनेक्शन बेहतर प्रदर्शन-वार होगा, लेकिन मुझे नहीं पता कि डीबी कनेक्शन स्थापित करने के लिए ओवरहेड क्या है।

डी) क्या यह सब कुछ के लिए संग्रहीत एसक्यूएल प्रक्रियाओं का उपयोग करना सबसे अच्छा है?

इन मामलों में आपके अनुभव से किसी भी संकेत/टिप्पणियां/सुझावों की बहुत सराहना की जाती है।

संपादित करें:

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

उत्तर

5

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

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

संग्रहित प्रक्रियाएं आपके डेटाबेस प्रश्नों को तेज़ी से बढ़ाएंगी क्योंकि निष्पादन योजना पहले से ही संकलित की गई है और सहेजी गई है - यदि आप कर सकते हैं तो अत्यधिक उपयोग करने की अनुशंसा की जाती है।

क्या आपने अपना डेटाबेस डेटा कैशिंग देखा है? यदि आप कर सकते हैं spymemcached पर एक नज़र डालें, यह आपके डेटा स्टोर में कॉल की संख्या को कम करने के लिए एक अच्छा उत्पाद है।

2

मेरे अनुभव से, आपको वेब सेवा में डेटाबेस को लपेटने के लिए थोड़ा समय देना चाहिए।

  1. आप व्यापक उपभोग के लिए डेटा की जांच करने के लिए मजबूर कर रहे हैं
  2. आप यह आसान नए उपभोक्ताओं डेटा

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

+0

एक जावा सर्वर चल रहा है जो डेटाबेस तक पहुंचता है। मेरे प्रश्न मुख्य रूप से संबंधित हैं कि सर्वर को डेटाबेस तक कैसे पहुंचा जाना चाहिए। – Zarjio

1

कॉमन्स डीबीसीपी जैसे कनेक्शन पूल का उपयोग करें। यह बॉक्स के बाहर, आप जिस चीज की चिंता कर रहे हैं, उसे संभालेगा।

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

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