पेजिंग को प्रभावी तरीके से कैसे लागू किया जाए?


9

मेरे पास एक डेटाबेस क्वेरी है जिसके परिणामस्वरूप एक बड़ा परिणाम सेट किया जा सकता है। क्लाइंट जो डेटा प्रदर्शित करता है वह नेटवर्क पर डेटा प्राप्त करता है, इसलिए विचार डेटाबेस से केवल पहले 50 परिणामों को प्राप्त करके और उन्हें क्लाइंट को भेजने के द्वारा स्थानांतरित डेटा की मात्रा को कम करना था। फिर मैं अगले 50 परिणामों आदि को पुनः प्राप्त करने के लिए दूसरे पृष्ठ पर कूदने की संभावना प्रदान करूँगा (कुछ इसी तरह जैसे कि Google ऑफ़र)

सवाल यह है कि पेजिंग को लागू करने का प्रभावी तरीका क्या है। मैं यह सुनिश्चित करना चाहता हूं कि mssql जितना संभव हो सके कैश का उपयोग करे और यह कि एक बार फिर से निष्पादित नहीं किया जाता है जब मैं पेजिंग बदलता हूं।

अधिक ग्राहक हैं जो एक ही समय में डेटाबेस को क्वेरी कर रहे हैं। प्रयुक्त एसक्यूएल इंजन: एमएस एसक्यूएल 2005

मेरे विचार थे:

  • निष्पादन योजना साझाकरण सुनिश्चित करने के लिए तैयार किए गए sql राज्य का उपयोग करें
  • केवल आवश्यक पंक्तियों को पुनः प्राप्त करने के लिए ROW_COUNT चर का उपयोग करें

लेकिन क्या यह वास्तव में सबसे प्रभावी तरीका है? या क्या आपको लगता है कि कोड में पेजिंग लागू करने और क्लाइंट को डेटा भेजने वाले पेज पर लागू करने के लिए बेहतर होगा?

आपके सुझावों के लिए धन्यवाद!

सादर, टॉमस

जवाबों:


7

क्वेरी को हर बार निष्पादित किया जाएगा। SQL सर्वर परिणाम कैश नहीं करता है।

SQL Server 2011 तक उचित पेजिंग लागू नहीं की जाएगी, लेकिन तब तक आपके विकल्प (जैसा आपने पहचाना) हैं:

  • ROW_NUMBER () और मांग पर प्रश्न
  • ग्राहक कैशिंग

एक तैयार किए गए SQL स्टेटमेंट को हर बार भी निष्पादित किया जाएगा।

यदि आपके पास मोटा ग्राहक है तो ग्राहक के लिए कैशिंग स्थानीय है। यह ज्यादातर ठीक है जब तक कि आपके पास उदाहरण के लिए लाखों ब्लब्स न हों।

हमारे वेब क्लाइंट में हम सभी परिणाम प्रस्तुत करते हैं, लेकिन केवल शीर्ष 100 दिखाते हैं और 101+ पंक्तियों के साथ एक छिपे हुए DIV को फैलाने की तुलना में "सभी दिखाएँ" बटन है। हम वेब सर्वर में कैश नहीं करते हैं और हम पेजिंग की पेशकश नहीं करते हैं।


धन्यवाद। और क्या बेहतर तरीका है अगर उपयोगकर्ता कुछ छँटाई मानदंडों को बदलता है? क्या मुझे नए मापदंड के साथ एक बार फिर क्वेरी निष्पादित करनी चाहिए या क्लाइंट पर परिणाम सॉर्ट करना चाहिए?
टॉमस वालेक

1
मैं ग्राहक में छाँटना चाहता हूँ। डेटा वहाँ पहले से ही है। हाँ, एक डेटाबेस छँटाई में अच्छा है लेकिन यदि डेटा समान है और उपलब्ध है तो दूसरा कॉल क्यों करें? हम ब्राउज़र में छँटाई को सक्षम करने के लिए एक jQuery ऐड-ऑन का उपयोग करते हैं :-)
gbn

4

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


धन्यवाद। मुझे वास्तव में दोनों की आवश्यकता है: सर्वर और क्लाइंट के बीच संचार WCF में लागू किया गया है, इसलिए एक संदेश के लिए एक अधिकतम आकार है और यदि परिणामी सेट इस आकार से अधिक है, तो मुझे ग्राहक को पूरा डेटा स्थानांतरित करने के लिए और संदेश भेजने होंगे। ग्राहकों को भी कई पन्नों के माध्यम से जल्दी से पेज करना पसंद है ...:
टॉमस वालेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.