2012-08-27 15 views
10

मैं कुछ परिभाषित preparedStatement कैशिंग के लिए "maxStatements" के साथ उदाहरण c3p0 के लिए उपयोग कर रहा हूँ क्या मतलब है। यह कैशिंग वास्तव में क्या करती है? यह किस तरह का डेटा कैश करता है। किस स्तर पर (डीबी, आवेदन, ..)? उदाहरण से इसे समझना अच्छा लगेगा। उदाहरण के लिए मैं एक प्रश्नPreparedStatement कैशिंग - यह (यह कैसे काम करता)

चयन * sometable से जहां somecolumn = है?

अब मैं इसे तैयार कथन में भेजता हूं जो कैश नहीं है। और अब मैं इसे भेज रहा हूं और यह कैश किया गया है। क्या अंतर है। पहले मामले में और दूसरे में क्या हुआ। पहले मामले में और दूसरे में डीबी सर्वर को क्या भेजा जाता है?

धन्यवाद।

उत्तर

9

कैशिंग के बिना, आप एक नया PreparedStatement हर बार जब आप कनेक्शन से एक अनुरोध मिल जाएगा। कैशिंग के साथ, यदि आप एक ही SQL स्ट्रिंग प्रदान करते हैं, तो आप अक्सर सटीक उसी प्रकार की जावा ऑब्जेक्ट को तैयार किए गए स्टेमेंटमेंट प्राप्त करेंगे। यदि आप एक ही एसक्यूएल को एक प्रीपेडस्टेटमेंट को प्रदान करते हैं, यहां तक ​​कि विभिन्न पैरामीटर के साथ भी, डेटाबेस निष्पादन योजना जैसी जानकारी का पुन: उपयोग कर सकता है, लेकिन केवल तभी यदि आप एक ही प्रीपेयरस्टेटमेंट का उपयोग करना जारी रखते हैं। कैशिंग आपके ऐप को उस प्रीपेडस्टेटमेंट संदर्भ पर ही रखने की आवश्यकता नहीं है।

8

जॉन वाट 'जवाब बहुत अच्छा है।

नोट कोई उदाहरण कोड क्योंकि वक्तव्य कैशिंग पारदर्शी है प्रदान की जा सकती है कि यह है कि: कोड का उपयोग करता है यह वास्तव में कोड जो ऐसा नहीं करता तरह दिखता है। आप अधिकतम मानदंडों और maxStatementsPerConnection को सकारात्मक मान पर सेट करके, c3p0 में स्टेटमेंट कैशिंग चालू करते हैं।

बयान कैशिंग से कोई प्रदर्शन लाभ डेटाबेस/JDBC ड्राइवर निर्भर है। यह देखने के लिए कि क्या कथन कैशिंग मदद करता है, कथन कैशिंग बंद करने के साथ पहले अपने ऐप को प्रोफ़ाइल करने का प्रयास करें और फिर maxStatementsPerConnection के साथ तैयार किए गए कथन प्रश्नों की संख्या पर सेट करें जो आपका ऐप बार-बार उपयोग करता है। कुछ ऐप्स/डेटाबेस/ड्राइवरों के लिए, आपको एक महत्वपूर्ण लाभ दिखाई देगा। दूसरों के लिए आपको कोई भौतिक लाभ नहीं दिखाई देगा।

+0

क्या अंगूठे का कोई नियम है? मेरा ऐप अनुक्रमिक रूप से लगभग 100 अलग-अलग वर्गों को निष्पादित करता है, इस प्रकार मुझे लगता है कि 50 हिट अनुपात के बराबर तैयार स्टेमेंट पूल के साथ 0 (एलआरयू?) होगा। – j23

+1

करने के लिए सबसे सरल बात 'maxStatementsPerConnection' का उपयोग करें और इसे अपने आवेदन द्वारा तैयार किए गए स्टेटमेंट की संख्या पर सेट किया गया है। (जो ऐप प्रारंभिकरण पर उपयोग किए जाने वाले वक्तव्यों को अनदेखा कर रहा है, या प्रशासनिक उद्देश्य आदि के लिए बहुत कम उपयोग किया जाता है) यदि आपका ऐप हमेशा अनुक्रमिक रूप से 100 अलग-अलग तैयार किए गए स्टेटमेंट निष्पादित करता है, तो सुनिश्चित करें कि 'maxStatementsPerConnection' को 100 पर सेट करने का प्रयास करें, लेकिन जोखिम है कि उसमें स्मृति और संसाधन पदचिह्न किसी भी लाभ से अधिक होगा और आप बिना बेहतर हो जाएंगे। आपको देखना होगा। –

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