2012-03-18 15 views
14

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

तो विपक्ष और पेशेवर क्या हैं? क्या यह एसिंचोननाइजेशन ऐसवर्वर की क्षमता में सुधार करेगा (यानी समवर्ती अनुरोध संसाधित) जैसे एनओओ?

उत्तर

12

चाहे अभिनेताओं में जेडीबीसी पहुंच डालना अच्छा है या नहीं, आपके बाकी आवेदन पर निर्भर करता है।

अधिकांश वेब एप्लिकेशन आज सिंक्रोनस हैं, Servlet API के लिए धन्यवाद जो अधिकांश जावा (और स्कैला) वेब ढांचे को कम करता है। जबकि हम अब support for asynchronous servlets देख रहे हैं, उस समर्थन ने सभी ढांचे को अपना रास्ता नहीं बनाया है। जब तक आप a framework that supports asynchronous processing से शुरू नहीं करते हैं, तो आपका अनुरोध प्रसंस्करण तुल्यकालिक होगा।

जेडीबीसी, JDBC is synchronous के लिए। वास्तव में इस बारे में कुछ भी नहीं किया जा रहा है, जो बोझ दिया गया है जो दुनिया में बाहर आने वाले गजबियन जेडीबीसी चालक कार्यान्वयन को संशोधित करने के लिए होगा। हम उम्मीद कर सकते हैं, लेकिन अपनी सांस पकड़ो मत।

और जेडीबीसी कार्यान्वयन खुद को थ्रेड सुरक्षित नहीं होना चाहिए, इसलिए उसी कनेक्शन पर किसी अन्य ऑपरेशन के पूरा होने से पहले जेडीबीसी कनेक्शन पर एक ऑपरेशन का आह्वान करने से अपरिभाषित व्यवहार होगा। और अपरिभाषित व्यवहार! = अच्छा।

तो मेरा अनुमान है कि आपको एनआईओ के साथ दिखाई देने वाली वही क्षमता सुधार दिखाई नहीं देगा।

संपादित: बस adbcj की खोज की; एक एसिंक्रोनस डेटाबेस ड्राइवर एपीआई। यह एक प्रयोगात्मक परियोजना है जो मास्टर की थीसिस के लिए लिखी गई है, बहुत जल्दी, प्रयोगात्मक। यह एक योग्य प्रयोग है, और मुझे उम्मीद है कि यह सफल होगा। इसकी जांच - पड़ताल करें!

लेकिन, यदि आप एक अतुल्यकालिक, अभिनेता आधारित प्रणाली का निर्माण कर रहे, मैं वास्तव में डेटा का उपयोग या भंडार अभिनेताओं, उसी तरह से ज्यादा होने के विचार की तरह अपने एक स्तरित में data acccess या repository वस्तुओं के लिए होता है ओओ वास्तुकला।

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

यह आपको एसिंक्रोनस रिमोट सिस्टम जैसे डेटाबेस का इलाज करने की अनुमति देता है, जिसे हम सभी के साथ इलाज कर रहे थे। इसका यह भी अर्थ है कि आपके डेटा एक्सेस/रिपोजिटरी कलाकारों के परिणाम futures हैं, जो composable हैं। इससे अन्य एसिंक्रोनस गतिविधियों के साथ डेटा एक्सेस को समन्वयित करना आसान हो जाता है।

तो, क्या यह अच्छा है? शायद, अगर यह आपके बाकी सिस्टम के आर्किटेक्चर के भीतर फिट बैठता है। क्या यह क्षमता में सुधार करेगा? यह आपके समग्र सिस्टम पर निर्भर करेगा, लेकिन यह एक बहुत ही योग्य प्रयोग की तरह लगता है।

+0

यह एक अच्छा जवाब है और दी गई सामग्री बहुत जानकारीपूर्ण हैं। मैं सिर्फ अन्य महान विचारों के लिए कई दिनों तक इंतजार कर रहा था। – xiefei