से विशाल परिणाम सेट को कैसे प्रबंधित करें मैं एक बहु-स्तरीय डेटाबेस संचालित वेब अनुप्रयोग - एसक्यूएल रिलेशनल डेटाबेस, मध्य सेवा स्तर के लिए जावा, यूआई के लिए वेब डिजाइन कर रहा हूं। भाषा वास्तव में कोई फर्क नहीं पड़ता।डेटाबेस
मध्यम सेवा स्तर डेटाबेस की वास्तविक क्वेरीिंग करता है। यूआई बस कुछ डेटा मांगता है और इसमें कोई अवधारणा नहीं है कि इसका डेटाबेस द्वारा समर्थित है।
सवाल यह है कि बड़े डेटा सेट को कैसे संभालना है? यूआई डेटा मांगता है लेकिन परिणाम स्मृति में फिट होने के लिए संभवतः बहुत बड़ा हो सकता है।
StreetSign getStreetSign(int identifier)
Collection<StreetSign> getStreetSigns(Street street)
Collection<StreetSign> getStreetSigns(LatLonBox box)
यूआई परत कुछ मानदंडों को पूरा सभी सड़क के संकेत प्राप्त करने के लिए पूछता है: उदाहरण के लिए, एक सड़क पर हस्ताक्षर आवेदन की एक सेवा परत हो सकता है। मानदंडों के आधार पर, परिणाम सेट विशाल हो सकता है। यूआई परत परिणामों को अलग-अलग पृष्ठों (ब्राउज़र के लिए) में विभाजित कर सकती है या बस उन्हें सभी प्रस्तुत कर सकती है (गोल्ज अर्थ तक सेवा कर रही है)। संभावित रूप से विशाल परिणाम सेट प्रदर्शन और संसाधन समस्या (स्मृति से बाहर) हो सकता है।
एक समाधान पूरी तरह से लोड ऑब्जेक्ट्स (स्ट्रीटसाइन ऑब्जेक्ट्स) वापस नहीं करना है। इसके बजाय कुछ प्रकार के परिणाम सेट या इटेटरेटर लौटें जो आलसी प्रत्येक व्यक्तिगत वस्तु को लोड करता है।
getStreetSigns(box, 1, 1000000000)
मैं:
Collection<StreetSign> getStreetSigns(LatLonBox box, int pageNumber, int resultsPerPage)
बेशक
यूआई अभी भी एक बहुत बड़ा परिणाम सेट अनुरोध कर सकते हैं:
एक अन्य समाधान सेवा एपीआई बदलने के लिए अनुरोध डेटा के एक उपसमूह वापस जाने के लिए है इस परिदृश्य के लिए मानक उद्योग डिजाइन पैटर्न क्या उत्सुक है?
'संग्रह स्ट्रीटसिग्न्स (स्ट्रीट स्ट्रीट) प्राप्त करें' यह आपकी समस्या है। भले ही ऐप को पता न हो कि इसे डीबी द्वारा समर्थित किया जा रहा है, लेकिन इसके संग्रह के आकार पर इसका नियंत्रण होना चाहिए। इसलिए यदि उस सिज़ पर कोई अंतर्निहित सीमा नहीं है, तो आपको एप्लिकेशन को एक निर्दिष्ट करने की अनुमति देनी चाहिए: 'संग्रह स्ट्रीट सिग्नल (स्ट्रीट स्ट्रीट, int maxResults, int firstResult) प्राप्त करें। –