एक वेबसाइट सेवा के माध्यम से बड़े परिणाम लौट रहा है

I'm working on a web service at the moment and there is the potential that the returned results could be quite large ( > 5mb).

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

  1. यदि कनेक्शन गुम हो गया है, तो पूरा परिणाम होना होगा पुनर्जन्म और फिर से भेजा। है किसी भी तरह से मैं किसी भी तरह से कर सकते हैं यदि कनेक्शन खो गया है तो "फिर से शुरू करें" या रीसेट करें?

  2. परिणाम भेजना क्या यह बड़ा भी उचित है? क्या कुछ प्रकार के "पेजिंग" को कार्यान्वित करना बेहतर होगा जहां परिणाम उत्पन्न होता है और सर्वर पर संग्रहीत होता है और क्लाइंट परिणामस्वरूप परिणामों की छोटी मात्रा में डाउनलोड कर सकता है और सेट को अपने अंत में फिर से इकट्ठा कर सकता है?

0
ro fr bn

4 उत्तर

परिणाम सेट आकार के रूप में 5 एमबी के खिलाफ कोई कठोर कानून नहीं है। 400 एमबी से अधिक भेजने के लिए कठिन हो सकता है।

आप स्वचालित रूप से एसिंक हैंडलर प्राप्त करेंगे (क्योंकि आप .NET का उपयोग कर रहे हैं)

कुछ प्रकार के "पेजिंग" को लागू करें जहां   परिणाम उत्पन्न और संग्रहीत किया जाता है   सर्वर और क्लाइंट पर तब कर सकते हैं   परिणामसेट के भाग डाउनलोड करें   छोटी मात्रा और फिर से इकट्ठा   उनके अंत में सेट

यह आपके लिए पहले से ही हो रहा है - इसे टीसीपी/आईपी कहा जाता है ;-) पुन: कार्यान्वित करना जो अधिक हो सकता है।

इसी प्रकार -

संपूर्ण परिणामसेट होना होगा   पुनर्जन्म और फिर से भेजा

यदि यह एमएस-एसक्यूएल है, उदाहरण के लिए, जो अधिकतर परिणामसेट उत्पन्न कर रहा है - फिर इसे पुन: उत्पन्न करना SQL सर्वर में कुछ अंतर्निहित कैशिंग का लाभ उठाएगा और बाद की पीढ़ी तेज हो जाएगी।

कुछ हद तक आप इन समस्याओं के बारे में चिंता न करने से दूर हो सकते हैं, जब तक कि वे 'असली' समस्याओं के रूप में सतह न हो जाएं - क्योंकि आप जिस मंच (प्लेट) का उपयोग कर रहे हैं, वह आपके लिए प्रदर्शन की बाधाओं का ख्याल रखता है।

0
जोड़ा

तो ऐसा लगता है कि आपको ऐसे समाधान में दिलचस्पी होगी जो आपकी वेब विधि में 'रिकॉर्डिंग नंबर' और 'अंतिम रिकॉर्ड नंबर' पैरामीटर जोड़ती है। (या 'पृष्ठ संख्या' और 'परिणाम प्रति पृष्ठ')

यदि बैकिंग स्टोर एसक्यूएल सर्वर (या यहां तक ​​कि mysql) है तो यह बहुत कठिन नहीं होना चाहिए क्योंकि उन्होंने पंक्ति संख्या के लिए समर्थन में बनाया है।

इसके बावजूद आप सर्वर पर किसी भी सत्र प्रबंधन से बचने में सक्षम होना चाहिए, परिणाम सेट की किसी भी स्पष्ट कैशिंग से बचें, और बस अपने जीवन को सरल रखने के लिए बैकिंग स्टोर के कैशिंग पर भरोसा करें।

0
जोड़ा

मैं गुप्तजीक की टिप्पणी से कुछ हद तक असहमत हूं:

यह आपके लिए पहले से ही हो रहा है - इसे टीसीपी/आईपी कहा जाता है ;-) पुन: कार्यान्वित करना जो ओवरकिल हो सकता है।

ऐसे समय होते हैं जब आप ऐसा करना चाहते हैं, लेकिन वास्तव में केवल यूआई परिप्रेक्ष्य से। यदि आप क्लाइंट को डेटा स्ट्रीम करने के लिए कुछ तरीकों को लागू करते हैं (पुशलेट मैकेनिज्म की तरह कुछ के माध्यम से), या इसे सुझाए गए पृष्ठों में इसे घुमाएं, तो आप क्लाइंट पर कुछ वाकई छोटे सबसेट लोड कर सकते हैं और फिर धीरे-धीरे यूआई बना सकते हैं डेटा की पूरी मात्रा।

यह एक स्लिमर, स्पीड यूआई (उपयोगकर्ता के परिप्रेक्ष्य से) के लिए बनाता है, लेकिन आपको मूल्यांकन करना होगा कि अतिरिक्त प्रयास सार्थक होगा ... क्योंकि मुझे नहीं लगता कि यह काम की एक महत्वपूर्ण राशि होगी।

0
जोड़ा

मैंने सभी तीन दृष्टिकोण देखे हैं, पेजेड , स्टोर और पुनर्प्राप्त करें , और भारी धक्का

मुझे लगता है कि आपकी समस्या का समाधान कुछ हद तक निर्भर करता है कि आपका परिणाम सेट इतना बड़ा क्यों है और यह कैसे उत्पन्न होता है। क्या आपके परिणाम समय के साथ बढ़ते हैं, क्या वे एक बार में सभी की गणना करते हैं और फिर धक्का देते हैं, क्या आप उन्हें जितनी जल्दी हो सके उन्हें स्ट्रीम करना चाहते हैं?

पेजिंग दृष्टिकोण

मेरे अनुभव में, एक पेजिंग दृष्टिकोण का उपयोग करना उचित होता है जब ग्राहक को परिणाम परिणामों के पृष्ठों के समान परिणाम सेट के उचित आकार के हिस्सों तक त्वरित पहुंच की आवश्यकता होती है। यहां पर विचार आपके प्रोटोकॉल की समग्र चतुरता, क्लाइंट पेज अनुरोधों के बीच पूरे परिणाम सेट के कैशिंग, और/या परिणामों के एक पृष्ठ को उत्पन्न करने के लिए प्रसंस्करण समय लेते हैं।

स्टोर और पुनर्प्राप्त करें

स्टोर और पुनर्प्राप्ति उपयोगी होती है जब परिणाम यादृच्छिक पहुंच नहीं होते हैं और परिणाम सेट होने पर परिणाम सेट आकार में बढ़ता है। यहां विचार करने के मुद्दे ग्राहकों के लिए जटिलता हैं और यदि आप उपयोगकर्ता को आंशिक परिणाम प्रदान कर सकते हैं या यदि आपको क्लाइंट को कुछ भी लौटने से पहले सभी परिणामों की गणना करने की आवश्यकता है (वितरित खोज इंजन से परिणामों की सॉर्टिंग सोचें)।

भारी पुश

भारी धक्का दृष्टिकोण लगभग निश्चित रूप से त्रुटिपूर्ण है। यहां तक ​​कि यदि ग्राहक को सभी जानकारी की आवश्यकता होती है और इसे एक मोनोलिथिक परिणाम सेट में धकेलने की आवश्यकता होती है, तो भी मैं WS-ReliableMessaging (या तो सीधे या अपने स्वयं के सरलीकृत संस्करण के माध्यम से) और दृष्टिकोण के दृष्टिकोण को लेने की अनुशंसा करता हूं आपके परिणाम यह करके आप

  1. सुनिश्चित करें कि टुकड़े ग्राहक तक पहुंचें
  2. जैसे ही आपको क्लाइंट से रसीद मिलती है
  3. जैसे ही खंड को त्याग सकते हैं
  4. सर्वर और क्लाइंट पक्षों पर 5 एमबी एक्सएमएल, डीओएम, या स्मृति में जो भी हो (यह मानते हुए कि आप स्ट्रीमिंग तरीके से परिणाम संसाधित नहीं कर रहे हैं) को स्मृति खपत के साथ संभावित मुद्दों को कम कर सकते हैं।

जैसा कि दूसरों ने कहा है, वैसे भी कुछ भी न करें जब तक कि आप अपने परिणाम सेट आकार, यह कैसे उत्पन्न होता है, और समग्र प्रदर्शन वास्तविक मुद्दों के बारे में नहीं जानते।

0
जोड़ा