आपको इसे सफलतापूर्वक खींचने के लिए कई तकनीकों को नियोजित करने की आवश्यकता है।
पहले, आपको किसी प्रकार की दृढ़ता परत की आवश्यकता है। यदि आप एक सादे पुरानी वेबसाइट का उपयोग कर रहे हैं, तो उपयोगकर्ता का सत्र उपयोग करने के लिए सबसे तार्किक परत होगी। यदि आप वेब सेवाओं (अर्थात् सत्र-कम) का उपयोग कर रहे हैं और केवल क्लाइंट के माध्यम से कॉल कर रहे हैं, तो आपको अपनी सेवाओं के लिए अभी भी कुछ प्रकार की एप्लिकेशन लेयर (साझा सत्र का प्रकार) चाहिए। क्यूं कर? यह परत आपके डेटाबेस परिणाम कैश का घर होगा।
दूसरा, आपको जो भी कंटेनर आप उपयोग कर रहे हैं (सत्र या वेब सेवाओं की एप्लिकेशन परत) में अपने परिणामों को कैशिंग करने का एक तरीका चाहिए। आप इसे दो तरीकों से कर सकते हैं ... यदि क्वेरी कुछ ऐसा है जो कोई भी उपयोगकर्ता कर सकता है, तो क्वेरी का एक सरल हैश काम करेगा, और आप इस संग्रहीत परिणाम को अन्य उपयोगकर्ताओं के बीच साझा कर सकते हैं। आप शायद परिणाम के लिए कुछ प्रकार के GUID चाहते हैं, ताकि आप इसे अपने क्लाइंट एप्लिकेशन में पास कर सकें, लेकिन परिणामों से प्रश्नों में हैश लुकअप होना उपयोगी होगा। यदि ये प्रश्न अनूठे हैं तो आप केवल क्वेरी परिणाम के लिए अद्वितीय GUID का उपयोग कर सकते हैं और इसे क्लाइंट एप्लिकेशन के साथ पास कर सकते हैं। ऐसा इसलिए है कि आप अपनी कैशिंग कार्यक्षमता निष्पादित कर सकते हैं ...
कैशिंग तंत्र कुछ प्रकार की निश्चित लंबाई बफर या कतार शामिल कर सकता है ... ताकि नए परिणाम जोड़े जाने के बाद पुराने परिणाम स्वचालित रूप से साफ़/हटा दिए जाएंगे। फिर, यदि कोई क्वेरी उस कैश मिस में आती है, तो इसे सामान्य रूप से निष्पादित किया जाएगा और कैश में जोड़ा जाएगा।
तीसरा, आप पृष्ठ पर किसी तरह अपने परिणाम वस्तु ... इटरेटर पैटर्न यहाँ अच्छी तरह से काम चाहते करने जा रहे हैं, हालांकि शायद कुछ सरल काम हो सकता है ... की तरह एक्स परिणाम की राशि बिंदु पर शुरू लाने वाई। हालांकि इटरेटर पैटर्न बेहतर होगा क्योंकि आप बाद में अपने कैशिंग तंत्र को हटा सकते हैं और डेटाबेस को सीधे डेटाबेस से हटा सकते हैं यदि आप चाहें तो।
चौथा, आपको किसी प्रकार की प्री-फ़ेच तंत्र (जैसा कि अन्य सुझाव दिया गया है) की आवश्यकता है। आपको एक थ्रेड लॉन्च करना चाहिए जो पूर्ण खोज करेगा, और आपके मुख्य थ्रेड में शीर्ष एक्स आइटमों की संख्या के साथ त्वरित खोज करें। उम्मीद है कि उपयोगकर्ता पेजिंग की कोशिश करता है, दूसरा धागा समाप्त हो जाएगा और आपका पूरा परिणाम अब कैश में होगा। यदि परिणाम तैयार नहीं है, तो आप बस कुछ सरल लोडिंग स्क्रीन तर्क शामिल कर सकते हैं।
इससे आपको कुछ रास्ता मिलना चाहिए ... अगर आप स्पष्टीकरण/किसी विशेष भाग के बारे में अधिक जानकारी चाहते हैं तो मुझे बताएं।
मैं आपको कुछ और सुझावों के साथ छोड़ दूंगा ...
आप क्लाइंट ऐप पर पूरा परिणाम नहीं भेजना चाहते हैं (यदि आप अजाक्स या आईफोन ऐप की तरह कुछ उपयोग कर रहे हैं)। क्यूं कर? ठीक है क्योंकि यह एक बड़ा अपशिष्ट है। उपयोगकर्ता संभवतः सभी परिणामों के माध्यम से पृष्ठ पर नहीं जा रहा है ... अब आपने कुछ भी नहीं के लिए 2 एमबी परिणाम फ़ील्ड भेजे हैं।
जावास्क्रिप्ट एक भयानक भाषा है लेकिन याद रखें कि यह अभी भी एक क्लाइंट साइड स्क्रिप्टिंग भाषा है ... आप अपने अजाक्स क्लाइंट को संभालने के लिए भारी मात्रा में डेटा भेजकर उपयोगकर्ता अनुभव को धीमा नहीं करना चाहते हैं। बस अपने क्लाइंट और अतिरिक्त पेज परिणामों को उपयोगकर्ता पृष्ठों के रूप में प्रीफ़ेटेड परिणाम भेजें।
अमूर्त अमूर्त अमूर्तता ... आप कैश, क्वेरीिंग, पेजिंग, प्रीफेचिंग को दूर करना चाहते हैं ... जितना आप कर सकते हैं उतना ही कर सकते हैं। क्यूं कर? खैर कहें कि आप डेटाबेस स्विच करना चाहते हैं या आप सीधे कैश में परिणाम ऑब्जेक्ट का उपयोग करने के बजाय डेटाबेस से पेज करना चाहते हैं ... ठीक है अगर आप इसे सही करते हैं तो बाद में इसे बदलना बहुत आसान है। साथ ही, यदि वेब सेवाओं का उपयोग करते हैं, तो कई अन्य एप्लिकेशन बाद में इस तर्क का उपयोग कर सकते हैं।
अब, मैंने शायद आपको आवश्यकतानुसार एक अधिक इंजीनियर समाधान का सुझाव दिया है :)। लेकिन, यदि आप सभी सही तकनीकों का उपयोग करके इसे खींच सकते हैं, तो आप एक टन सीखेंगे और यदि आप कार्यक्षमता को विस्तारित करना चाहते हैं या इस कोड का पुन: उपयोग करना चाहते हैं तो बहुत अच्छा आधार प्राप्त करें।
यदि आपके कोई प्रश्न हैं तो मुझे बताएं।
क्या आपने अपाचे सोलर को देखा है? –