2012-06-11 11 views
5

की लागत अगर मैं ही कभी एक Statement एक समय में मेरी Connection उपयोग किए जाने वाले यह सार्थक यह cacheing होगा। मैं पहले ही कनेक्शन को कैश कर रहा हूं ताकि मैं कथन को लगभग बिना किसी कीमत पर कैश कर सकूं।क्या एक वक्तव्य

अनिवार्य रूप से मुझे लगता है कि मैं पूछ रहा हूं कि कोई बयान बनाने के लिए कोई कीमत/ओवरहेड है या नहीं। मैं तैयार बयान तैयार करने के लाभों को पूरी तरह से समझता हूं। मैं विशेष रूप से Connection.createStatement() के बारे में बात कर रहा हूं।

+2

मैं हमेशा ग्रहण करेंगे एक ओवरहेड वहाँ है, लेकिन मैं हमेशा ग्रहण करेंगे भूमि के ऊपर, आपके आवेदन करने के लिए जटिलता जोड़ने के लायक नहीं है जब तक आप एक उपाय जो इंगित करता है कि यह एक जरूरत प्रदर्शन में सुधार है। –

+0

यह ऐसा होगा: यदि मेरा आवेदन लाखों बयान बना रहा है तो हाँ नहीं ... – Nik

उत्तर

0

कुछ शोध एक खुला स्रोत JDBC ड्राइवर (jtds) में बनाई गई प्रत्येक वक्तव्य के लिए निम्नलिखित वस्तु भूमि के ऊपर चलता है। मुमकिन है में बहुत ही छोटा कैश की गई -

  1. एक Connection: मैं एक नया Statement हर बार जब मैं डेटाबेस क्वेरी करना चाहते हैं बनाने के बजाय एक ही कैश्ड एक जोत और यह पुन: उपयोग की लागत की गणना करने के कोशिश कर रहा हूँ।
  2. एक TdsCore - एक प्रोटोकॉल कार्यान्वयन की तरह लग रहा है, लेकिन यह बहुत ही छोटा कैश किया गया है।
  3. ResultSet
  4. बैच किए गए आइटमों का ArrayList
  5. एक खुला ResultSet के ArrayList
  6. कॉलम मेटा डेटा।

तो ऐसा लगता है कि Statement की लागत का उच्चतम अनुपात शामिल है जो किसी भी क्वेरी द्वारा चलाया गया है।

4

किसी वक्तव्य की लागत को अन्य कारकों से स्वतंत्र रूप से प्रमाणित नहीं किया जा सकता है; जैसे डेटाबेस, जेडीबीसी ड्राइवर, कथन में एसक्यूएल और इतने पर।

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

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

+0

यह अच्छी तरह से ज्ञात है कि 'कनेक्शन' कैशिंग का एक अच्छा विचार है। इसलिए मैं हमेशा समय एकत्रित मीट्रिक बर्बाद किए बिना कनेक्शन का कैश कर दूंगा। मुझे उम्मीद थी कि 'स्टेटमेंट' के बारे में कुछ समान ज्ञान था। – OldCurmudgeon

+0

कैशिंग कनेक्शन केवल एक अच्छा विचार है यदि यह आवश्यक है। यदि यह आवश्यक नहीं है, तो आपने इसे कार्यान्वित करके डेवलपर समय बर्बाद कर दिया है। ऐसा इसलिए होता है कि मानक कनेक्शन पूल पुस्तकालय हैं, और यदि आप उन्हें अनावश्यक रूप से उपयोग करते हैं तो आप * अधिक * समय बर्बाद नहीं करते हैं। लेकिन मेरा मुद्दा यह है कि आपको समय अनुकूलन बर्बाद नहीं करना चाहिए ... या ऑप्टिमाइज़ेशन तकनीकों की तलाश करना चाहिए ... अगर कुछ प्रमाण नहीं हैं कि यह आवश्यक है। और स्टेटमेंट कैशिंग के लिए आपके पास कोई सामान्य सबूत नहीं है, और मुझे संदेह है कि यह मौजूद है। –

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