5

की बड़ी संख्या में डेटाबेस अनुरोधों के साथ एप्लिकेशन को अनुकूलित करें मुझे अपने आवेदन में उपयोगकर्ताओं को समाप्त करने के लिए कुछ सेवा के free demo प्रदान करना होगा। एक नए उपयोगकर्ता के लिए केवल एक बार के लिए मुफ्त डेमो 30 mins, 1 hours, 5 hours आदि (predefined time) हो सकता है।प्रति मिनट

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

अब समस्या कुछ अनिश्चित स्थितियों के साथ उत्पन्न होती है जैसे कि यदि उपयोगकर्ता ब्राउज़र को बंद कर देता है या उनके इंटरनेट ने अपने सक्रिय सत्र के दौरान काम खत्म कर दिया है या कुछ भी बंद कर दिया है। इसमें, मैं एंडटाइम की कमी के कारण अपने उपभोग किए गए समय की गणना नहीं कर सकता।

परिदृश्य नीचे जैसा हो सकता है (30 मिनट के डेमो के लिए)।

UserID StartTime   EndTime    Consumed(mins) 
10  09-04-2015 10:00 09-04-2015 10:10  10 
10  10-04-2015 05:00 10-04-2015 05:04  4 
10  11-04-2015 07:46 11-04-2015 07:56  10 
10  11-04-2015 10:00 // Browser closed or any uncertain condition 
10  11-04-2015 11:00 // How to restrict user to use actual 30 mins because I do not have EndTime in above row to calculate Consumed mins. 

मेरे पास हमारी सेवाओं का उपयोग करने के लिए 100,000 से अधिक उपयोगकर्ता हो सकते हैं, इसलिए मुझे इसके लिए एक कुशल समाधान मिल रहा है।

मेरी समझ के अनुसार, मैं उपयोगकर्ता के LastActiviteTime की जांच करने के लिए एक अलग नौकरी बना सकता हूं और उस पर आधारित मैं डेटाबेस में अपने उपभोग (मिनट) को अपडेट कर सकता हूं। वह नौकरी हर मिनट निष्पादित की जाएगी और दूसरी ओर, प्रत्येक सत्र उपयोगकर्ता का ब्राउज़र डेटाबेस में LastActiveTime अपडेट करेगा।

यह मेरी समस्या का समाधान कर सकता है लेकिन मुझे प्रति मिनट डेटाबेस अनुरोध की बड़ी संख्या के कारण मेरे आवेदन के प्रदर्शन के बारे में बहुत यकीन नहीं है।

+0

यह किस तरह की सेवा है? क्या उपयोगकर्ता आपकी सेवा का उपयोग करते समय सर्वर पर वापस इंटरैक्ट करता है? – Guanxi

+0

हां, उपयोगकर्ता सर्वर के साथ बातचीत करते हैं, हम अनुवाद की तरह सेवाएं प्रदान करते हैं। –

उत्तर

1

आप शायद जावास्क्रिप्ट के साथ स्टार्ट, एंड टाइम सत्यापन गड़बड़ क्लाइंट स्क्रिप्ट भी कर सकते हैं और स्टार्ट टाइम, ब्राउजर कुकी में एंड टाइम स्टोर कर सकते हैं और एक समय पर लिपि (जावा स्क्रिप्ट जो हर मिनट निष्पादित करता है) चलाते हैं, इसलिए अगर सत्यापन विफल हो जाता है क्लाइंट पक्ष पर ही आपको सर्वर (डेटाबेस) पक्ष पर इसे सत्यापित करने की आवश्यकता नहीं है, इस प्रकार डीबी को बहुत से उपयोगकर्ता प्रश्नों काट दिया जाएगा।

+0

लेकिन क्या, यदि उपयोगकर्ता –

+0

के बीच अपने ब्राउज़र को बंद कर देता है तो आपके जावास्क्रिप्ट को हर मिनट चलने पर भी कुकी में हर मिनट लास्टएक्टिव टाइम अपडेट करना जारी रखना चाहिए। इसलिए जब भी उपयोगकर्ता ब्राउज़र बंद कर देते हैं और इसे फिर से खोलते हैं, तो आप इस अंतिम समय का उपयोग कर सकते हैं - कॉमप्रिजन –

+0

के लिए स्टार्टटाइम यदि उपयोगकर्ता अगली बार विभिन्न ब्राउज़र में एप्लिकेशन खोलता है या एप्लिकेशन को बेवकूफ़ बनाने के लिए कुकीज़ साफ़ करता है। –

0

मैं डेटाबेस पर प्रभाव का आकलन करने के लिए एक प्रदर्शन परीक्षण आयोजित करने का सुझाव देता हूं, जो कि अधिकतम लोड अपेक्षा से थोड़ा अधिक है। फिर, परिणाम के आधार पर, आप उपयोग डेटा को जारी रखने के लिए RavenDB जैसे NoSQL समाधान का उपयोग करने पर विचार कर सकते हैं। NoSQL चमत्कार काम कर सकता है और ऐसी समस्याओं के लिए एक अच्छा मैच है।

बेशक, आप इसे निर्धारित क्लाइंट-साइड स्क्रिप्ट और AJAX के साथ कर सकते हैं क्योंकि रोलविन सी पहले से ही सुझाव दिया गया है। बस ध्यान रखें कि दुर्भावनापूर्ण उपयोगकर्ताओं के रास्ते में कुछ बाधाएं हैं, फिर भी इस दृष्टिकोण के साथ जोखिम का स्तर हमेशा लिया जाता है। तो देखें कि यह जोखिम आपके मामले में स्वीकार्य है क्योंकि यह डेटाबेस सर्वर पर बोझ को बहुत कम कर सकता है।

+1

एप्लिकेशन पहले से ही बनाया गया है और चल रहा है और मुझे केवल इस सुविधा को जोड़ना होगा। रिलेशनल डेटाबेस (एसक्यूएल सर्वर 2012) का उपयोग कर रहा है और मैं इसे NoSQL में नहीं बदल सकता। –

+0

मैंने मौजूदा संबंधपरक डेटाबेस के अलावा NoSQL का उपयोग करने का सुझाव दिया। एक आदर्श दुनिया में यह एक अच्छा विकल्प होगा। लेकिन निश्चित रूप से, यह विशेष रूप से आपके मामले पर निर्भर करता है यदि प्रयास इसके लायक है। वैसे भी, मुझे अभी भी लगता है कि आपको एक प्रदर्शन परीक्षण करना चाहिए - आप डेटाबेस के साथ ठीक हो सकते हैं। –

+0

ठीक है, मैं पहले एक प्रदर्शन परीक्षण करूँगा। –

0

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

सरलतम तालिका में एक और कॉलम जोड़ देगा जो आपने अंतिम इंटरटेक्शनटाइम के रूप में दिखाया है। और यदि कोई अंत समय नहीं है तो उपभोग समय की गणना करने के लिए अंतिम इंटरटेक्शनटाइम का उपयोग करें।

+1

इससे डाटाबेस हिट प्रति गतिविधि बढ़ेगी और सर्वर को क्रैश हो सकता है? –

+1

ऐसा मत सोचो। इस पर निर्भर करता है कि इसे कैसे अनुकूलित किया जाए। क्या आप पहले से ही अपने सेवा अनुरोधों के लिए लॉगिंग नहीं कर रहे हैं? और हां, जैसा कि प्लामेन ने उल्लेख किया है, आपको यह तय करने की आवश्यकता है कि कौन सा विकल्प इसके लायक है। – Guanxi

संबंधित मुद्दे