एएसपी.NET सिस्टम में महंगी खोज के परिणामों को कैशिंग करने के लिए एक अच्छा डिज़ाइन क्या है?एएसपी.NET अनुप्रयोग में खोज परिणामों के लिए कैशिंग आर्किटेक्चर
किसी भी विचार का स्वागत किया जाएगा ... विशेष रूप से उन लोगों को जिन्हें हमारे स्वयं के जटिल आधारभूत संरचना का आविष्कार करने की आवश्यकता नहीं है। कई सौ परिणाम रिकॉर्ड
- प्रत्येक खोज परिणाम शून्य से शामिल उत्पादन कर सकते हैं (5-15 सेकंड:
यहां कुछ सामान्य समस्या से संबंधित आवश्यकताएँ हैं डेटाबेस में)
- परिणाम ग्राहक पर प्रदर्शित किया जा रहा उपयोगकर्ता के लिए जानकारी अधिभार से बचने के लिए पहले पृष्ठवार किया जाना चाहिए
- उपयोगकर्ता को सॉर्ट, फ़िल्टर और परिणामों के भीतर खोज करने के लिए सक्षम होने की अपेक्षा लौटे
- उपयोगकर्ता परिणाम
- उपयोगकर्ता पृष्ठों के किसी भी संख्या पर (चेक बॉक्स के माध्यम से) से अधिक आइटम का चयन करने के
- उपयोगकर्ता अपेक्षाकृत तेज़ प्रदर्शन एक बार एक खोज है उम्मीद सक्षम होने की अपेक्षा जल्दी से खोज में पृष्ठों के बीच स्विच करने में सक्षम होने की उम्मीद समाप्त हो गया
मैं कहाँ और कैसे कैशिंग को लागू करने के लिए कुछ संभव विकल्पों को देखने के:
1. सर्वर (सत्र या अनुप्रयोग कैश में) पर कैश, postbacks या अजाक्स पैनलों का उपयोग कुशल पृष्ठांकन की सुविधा के लिए, छंटाई , फिल्टर एनजी, और खोज।
- पेशेवरों: ASP.NET बुनियादी ढांचे
- कान्स से लागू करने के लिए आसान, सभ्य समर्थन: बहुत बातूनी, स्मृति सर्वर पर गहन, डेटा आवश्यक से अधिक समय कैश की जा सकती; सर्वर पर प्रतिबंध लगाता है लोड संतुलन प्रथाओं
2. कैश (ऊपर के रूप में), लेकिन serializeable संरचनाओं कि समय की कुछ अवधि के बाद स्मृति से बाहर ले जाया जाता है सर्वर पर स्मृति दबाव को कम करने के लिए प्रयोग कर
- प्रोएस: सर्वर मेमोरी का कुशल उपयोग; लोड संतुलन का उपयोग करके स्केल करने की क्षमता;
- CONS: .NET आधारभूत संरचना से सीमित समर्थन; डेटा संरचनाओं में परिवर्तन होने पर संभावित रूप से नाजुक; डेटाबेस पर अतिरिक्त भार रखता है; काफी अधिक जटिल
3. ग्राहक पर कैश (JSON या XML क्रमांकन का उपयोग), पृष्ठ पर अंक लगाना करने के लिए, प्रकार, फिल्टर क्लाइंट साइड जावास्क्रिप्ट का उपयोग, और परिणाम का चयन करें।
- पेशेवरों: उपयोगकर्ता अनुभव संपर्क कर सकते हैं "अमीर ग्राहक" का स्तर; अधिकांश ब्राउज़र जेएसओएन/एक्सएमएल को मूल रूप से संभाल सकते हैं - मैनिपुलेशन के लिए सभ्य पुस्तकालय मौजूद हैं (उदा। jQuery)
- CONS: प्रारंभिक अनुरोध को डाउनलोड करने में लंबा समय लग सकता है; क्लाइंट मशीनों पर महत्वपूर्ण स्मृति पदचिह्न; ग्राहक डेटा की एक संकुचित/इनकोडिंग प्रतिनिधित्व के प्रयोग पर
4. कैश को लागू करने के कुछ स्तर पर हाथ से तैयार किए जावास्क्रिप्ट की आवश्यकता होगी - जब पृष्ठों स्विचन, क्रमित, फ़िल्टर और खोज को डिकोड करने के सर्वर में वापस बुलाने ।
- पेशेवरों: सर्वर पर छोटा स्मृति प्रभाव; जब तक ग्राहक को इसकी आवश्यकता होती है तब तक राज्य को रहने की अनुमति मिलती है; JSON/XML
- CONS पर क्लाइंट पर थोड़ा बेहतर मेमोरी उपयोग क्लाइंट/सर्वर के बीच आगे बढ़ने वाला बड़ा डेटा सेट; जेएसओएन/एक्सएमएल का उपयोग कर शुद्ध क्लाइंट-साइड कैशिंग के मुकाबले धीमी कार्यक्षमता (नेटवर्क I/O के कारण); और अधिक लागू करने के लिए जटिल - नेट/ब्राउज़र
5. कुछ वैकल्पिक कैशिंग योजना मैं नहीं माना जाता है से सीमित समर्थन ...
एक सुझाव: अपने मूल शीर्षक "खोज परिणामों के लिए कैशिंग" पर कुछ गुगल करें। अपने परिदृश्य में कैशिंग में केवल देख रहे हैं अपने आप को रोलिंग। वहाँ किया गया था कि; और यह खोज के साथ मुश्किल है। मैं तो बस कह रहा हूं। – jro
डीबी प्रश्नों के संदर्भ में 5-15 सेकंड लंबा लंबा समय है। शायद आपको डीबी प्रश्नों में सुधार करने के लिए कम से कम कुछ प्रयास करना चाहिए ("बाहरी जुड़ने" के बजाय "आंतरिक जुड़ने" का उपयोग करें, "जहां" फ़िल्टर के बजाय "आंतरिक जुड़ें" का उपयोग करें)। पूर्ण पाठ अनुक्रमण का उपयोग करने पर भी विचार करें। –