2013-07-24 5 views
5

मेरे पास एक आवेदन है जो 20000 डेटा-ऑपरेशन प्रति घंटे/ डेटा-ऑपरेशन में कुल 30 पैरामीटर (सभी 10 प्रश्नों के लिए) हैं। कुछ पाठ हैं, कुछ संख्यात्मक हैं। कुछ पाठ पैराम 10000 वर्ण तक हैं।एकाधिक प्रश्न वीएस संग्रहीत प्रक्रिया

हर डेटा संचालन निम्नलिखित है:

  • एकल डेटा संचालन, डेटाबेस में सम्मिलित करता है/अपडेट एकाधिक तालिकाओं (10 के आसपास)।
  • हर डेटा संचालन के लिए, मैं एक कनेक्शन,
  • तो मैं डेटा संचालन में प्रत्येक प्रश्न के लिए नए तैयार-कथन का उपयोग करते हैं।
  • हर बार जब कोई क्वेरी निष्पादित की जाती है तो तैयार-कथन बंद हो जाता है।
  • सभी 10 तैयार-बयान के लिए कनेक्शन का पुन: उपयोग किया जाता है।
  • डेटा-ऑपरेशन पूरा होने पर कनेक्शन बंद हो जाता है।

अब इस आंकड़े-कार्रवाई करने के लिए,

  • 10 प्रश्नों, 10 तैयार बयान (, बनाने पर अमल, करीब), 1o n/डब्ल्यू कॉल।
  • 1 कनेक्शन (खोलें, बंद करें)।

मुझे व्यक्तिगत रूप से लगता है कि, यदि मैं 10 से ऊपर के प्रश्नों से संग्रहीत प्रक्रिया बना रहा हूं, तो यह बेहतर विकल्प होगा।

सपा के मामले में, डेटा-संचालन करना होगा:

  • 1 कनेक्शन, 1 प्रतिदेय बयान, 1 n/डब्ल्यू हिट।

मैं इस सुझाव दिया, लेकिन मुझे बताया गया है कि

  • यह अधिक समय एसक्यूएल-प्रश्नों की तुलना में लेने वाली हो सकती है।
  • यह डीबी सर्वर पर अतिरिक्त भार डाल देगा।

मुझे अभी भी लगता है कि एसपी बेहतर विकल्प है। कृपया मुझे अपने इनपुट बताएं।

बेंचमार्किंग एक विकल्प है। किसी भी उपकरण को खोजना होगा जो इसमें मदद कर सकता है। कोई भी इस तरह की समस्या के लिए पहले से ही उपलब्ध बेंचमार्क सुझा सकता है।

+0

डाटा-ऑपरेशन के लिए कितने पैरामीटर हैं? – eggyal

+2

"यह अधिक समय लेने वाला हो सकता है" वे कहते हैं। यदि यह उनकी एकमात्र चिंता है तो उन्हें बेंचमार्क के साथ गलत साबित करें। – Joni

+1

हां, संग्रहित प्रक्रियाएं अलग-अलग डेटा ऑपरेशंस बनाने से बेहतर विकल्प हैं –

उत्तर

4

कोई भी सिफारिश आंशिक रूप से निर्भर करती है कि प्रश्नों को निष्पादित करने वाली स्क्रिप्ट कहां रहती है। यदि प्रश्नों को निष्पादित करने वाली स्क्रिप्ट MySQL इंस्टेंस के समान सर्वर पर है तो आपको उसमें बहुत अंतर दिखाई नहीं देगा, लेकिन 1 संग्रहीत प्रक्रिया की तुलना में 200k क्वेरी निष्पादित करने में अभी भी एक छोटा ओवरहेड होगा।

मेरी सलाह किसी भी तरह से संग्रहीत प्रक्रिया के रूप में इसे बनाने के लिए होगी। आपको शायद कुछ प्रक्रियाओं की आवश्यकता होगी।

  1. एक प्रक्रिया है कि 10 बयानों आप 1 कॉल
  2. एक प्रक्रिया है कि प्रक्रिया में खिलाने के लिए एक CURSOR का उपयोग कर तर्कों की मेज पर पुनरावृति कर सकते हैं में प्रति-आपरेशन करना जोड़ती है 1

आपका प्रक्रिया होगी

  1. जो प्रक्रिया द्वारा प्रक्रिया 1 में खिलाया जाता था तर्क के साथ एक मेज आबाद 2
  2. निष्पादन प्रक्रिया 2

इससे प्रदर्शन लाभ मिलेगा क्योंकि MySQL सर्वर 20000 * 10 बार से कनेक्ट करने की आवश्यकता नहीं है। जबकि ओवरहेड प्रति-अनुरोध छोटा हो सकता है, मिलीसेकंड जोड़ता है। भले ही बचत प्रति अनुरोध 0.1ms है, फिर भी यह 20 सेकंड बचा है।

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

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