- विंडोज सर्वर 2003 - आईआईएस 6.x
- ASP.NET 3.5 (सी #)
- आईई 7,8,9
- एफएफ (जो नवीनतम 10 संस्करण हैं)
उपयोगकर्ता परिदृश्य:
उपयोगकर्ता बड़े डेटा-सेट के खिलाफ खोज मानदंड दर्ज करता है। अनुरोध शुरू करने के बाद, उन्हें परिणाम पृष्ठ पर नेविगेट किया जाता है, जहां वे डेटा लोड होने तक प्रतीक्षा करते हैं और फिर डेटा को परिशोधित कर सकते हैं।
तकनीकी परिदृश्य:
उपयोगकर्ता (ajax कॉल के माध्यम से) खोज मापदंड भेजता है के बाद, यूआई बैक-एंड सेवा कहते हैं। बैक-एंड सेवा प्रश्न लेनदेन प्रणाली (ओं) और परिणामी डेटा को एक डीबी "कैश" में डालता है - एक denormalized तालिका, डेटा के आगे परिष्कृत करने के लिए सेट अप (यानी सॉर्टिंग, फ़िल्टरिंग)। यूआई तब तक प्रतीक्षा करता है जब तक डेटा कैश नहीं किया जाता है और फिर यह सूचित करने पर कि प्रक्रिया पूरी हो जाती है, परिणामस्वरूप पृष्ठ पर नेविगेट करता है। परिणामस्वरूप पृष्ठ तब denormalized तालिका से डेटा प्राप्त करने के लिए एक कॉल करता है।
समस्या:
खोज अपेक्षाकृत बड़े प्रश्नों है कि कई मापदंड में प्रवेश पर आधारित सिस्टम क्वेरी करने के लिए होने अंत के लिए धीमी गति से (15-25 सेकंड) है। यह अन्य प्रश्नों के लिए अपेक्षाकृत तेज़ है (< 4 सेकंड)।
तकनीकी प्रतिबंध:
हम नहीं पूरी तरह से फिर से वास्तुकार यह खोज/परिणाम प्रणाली कर सकते हैं। UI और बैक-एंड एक साथ कैसे बंधे हैं, इसके बीच यहां कई जटिलताओं का तरीका है। खोज मानदंडों को पूरा करने के बाद पृष्ठ की आवश्यकता है (बाधाओं के कारण जिन्हें स्टैक ओवरव्लो पर हल नहीं किया जा सकता है)।
हम संगठन से पूछने से पहले डेटा को denormalize करने के लिए भी नहीं कह सकते हैं क्योंकि डेटा वास्तविक समय होना चाहिए, यानी यदि कोई उपयोगकर्ता अन्य सिस्टम में बदलाव करता है, तो डेटा को सही तरीके से दिखाना होगा बाद में एक खोज
प्रक्रिया है कि मैं पालन करना चाहते हैं:
मैं एक छोटे से धोखा देने के लिए चाहते हैं। मैं एक अग्नि-भूल मॉडल में एक async HttpHandler के माध्यम से "कैश" अनुरोध जारी करना चाहता हूं।
क्वेरी जारी करने के बाद, मैं पृष्ठ को परिणामी पृष्ठ पर बदलना चाहता हूं।
संक्रमण पृष्ठ पर, मैं यह देखने के लिए "कैश" तालिका को मतदान करना चाहता हूं कि डेटा अभी तक इसमें डाला गया है या नहीं।
कारण मैं तुरंत इस संक्रमण को करना चाहता हूं, यह है कि परिणामी पृष्ठ अपने आप पर महंगा है (डेटा प्राप्त किए बिना भी) - डेटा प्राप्त करने वाली सेवा को कॉल करने से पहले भी 2 सेकंड लोड समय कैश से।
प्रश्न:
विल ASP.NET धागा async हैंडलर के माध्यम से कहा जाता है कि भले ही मैं पृष्ठ से दूर नेविगेट Javascript रीडायरेक्ट का उपयोग कर मज़बूती से प्रसंस्करण जारी रखें?
तकनीकी सीमाओं 2:
हाँ, मुझे पता है ... यह खोज प्रक्रिया कुशल ध्वनि नहीं करता है। अभी इसके बारे में कुछ भी नहीं है जो मैं कर सकता हूं। मैं कुछ भी करने की कोशिश कर रहा हूं जो इसे थोड़ा बेहतर करने के लिए कर सकता है, जबकि हम शोध जारी रखते हैं कि हम इसे फिर से आर्किटेक्ट करने के लिए कैसे जा रहे हैं।
यदि आपका उत्तर है: "इसे फेंक दें और शुरू करें", कृपया उत्तर न दें। यह स्वीकार्य नहीं है।
ठीक है, मुझे देखने दो कि मुझे यह मिला है या नहीं। जब उपयोगकर्ता कुछ खोज मानदंड भेजते हैं, तो आप क्वेरी निष्पादन को असीमित रूप से प्रारंभ करेंगे और तुरंत उपयोगकर्ता को परिणाम पृष्ठ पर रीडायरेक्ट करेंगे। फिर, परिणाम पृष्ठ पर आप पृष्ठ लोड करेंगे और उपयोगकर्ता के परिणामों को दिखाने के लिए सर्वर पर क्वेरी खत्म होने पर सत्यापित करना जारी रखें। और आप पूछ रहे हैं कि उपयोगकर्ता परिणाम पृष्ठ से बाहर निकलने पर एसिंक क्वेरी निष्पादन जारी रहेगा या नहीं? क्या वो सही है? –
यह लगभग सही है। सवाल यह नहीं है कि उपयोगकर्ता परिणाम पृष्ठ छोड़ देता है, लेकिन यह परिणाम जारी रहेगा क्योंकि उपयोगकर्ता परिणाम पृष्ठ पर स्थानांतरित हो जाता है। मेरी स्थानीय मशीन पर मेरे परीक्षण में, एसिंक ऑपरेशन चलना जारी रहता है। हालांकि, मैं यह सत्यापित करना चाहता हूं कि प्रक्रिया कितनी विश्वसनीय है। क्या यह एएसपी.नेट का डिज़ाइन किया गया व्यवहार है या "यह मेरी मशीन पर काम करता है" का मामला है? –
यदि आप वेब सर्वर पर असीमित रूप से कुछ प्रोसेसिंग चलाने के लिए थ्रेडिंग नेमस्पेस (क्या आप हैं?) का उपयोग कर रहे हैं, तो मुझे नहीं लगता कि यह "यह मेरी मशीन पर काम करता है" केस होगा। यह निश्चित रूप से आईआईएस पर भी अपेक्षित के रूप में काम करना चाहिए। –