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