2008-10-06 26 views
8

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

तो मेरा विचार उपयोगकर्ता गतिविधि निर्धारित करने के लिए 15 मिनट का अंतराल है। कुछ विचार मैं ऐसा करने के लिए है इस प्रकार हैं:

  1. एक तारीख और उनके पिछले गतिविधि के समय हर बार के साथ अपने उपयोगकर्ता रिकॉर्ड स्टाम्प इस वे कुछ है कि डेटाबेस मारता है, या किसी वेब पृष्ठ का अनुरोध करता है ऐसा ... हालांकि काफी डेटाबेस गहन हो सकता है।

  2. हमारे सॉफ़्टवेयर से "ऑनलाइन अनुरोध कौन है" भेजें, प्रतिक्रियाओं की तलाश में, यह एक निर्धारित अंतराल पर किया जा सकता है, और फिर मुझे प्राप्त प्रत्येक प्रतिक्रिया के लिए वर्तमान दिनांक और समय के साथ उपयोगकर्ता रिकॉर्ड मुद्रित करें।

आपके विचार क्या हैं? और आप इस स्थिति को कैसे संभालेंगे?

स्पष्टीकरण

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

विंडोज़ से मेरा मतलब क्लाइंट-सर्वर होगा।

स्पष्टीकरण

मैं एक n-स्तरीय संरचना का उपयोग कर रहा हूँ ताकि मेरे व्यापार वस्तुओं प्रस्तुति परत के साथ सभी बातचीत को संभाल। वह प्रस्तुति परत क्लाइंट-सर्वर विंडोज अनुप्रयोग, वेब अनुप्रयोग, वेब सेवा आदि को खिला सकती है।

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

+0

इस के लिए रणनीति में एक मेज पर उन्हें प्रवेश करें काफी अलग यह एक वेब अनुप्रयोग/क्लाइंट-सर्वर है, चाहे आदि के आधार पर हो सकता है - मुझे लगता है कि हम ढेर पर थोड़ा और अधिक विस्तार की जरूरत है/वास्तुकला शामिल – Whisk

+0

सहमत है, क्या यह एक वेब ऐप है या नहीं? –

+0

यदि मैं इसे क्लाइंट-सर्वर और वेब एप्लिकेशन के लिए काम कर सकता हूं जो सबसे अच्छा होगा। – mattruma

उत्तर

3

हमारा समाधान हमारी "सत्र" तालिका (जो यहां था) के अलावा, "लेनदेन" तालिका (जो किया गया था) को बनाए रखने के लिए है। अद्यतन, INSERT और हटाएं निर्देश सभी को "लेनदेन" ऑब्जेक्ट के माध्यम से प्रबंधित किया जाता है और इनमें से प्रत्येक SQL निर्देश को "लेनदेन" तालिका में संग्रहीत किया जाता है जब इसे डेटाबेस पर सफलतापूर्वक निष्पादित किया जाता है (अद्यतन तालिकाओं के आधार पर: हमारे पास विशेष रूप से संभावना है कुछ तालिकाओं का पालन करें और दूसरों को अनदेखा करें)। इस "लेनदेन" तालिका में अन्य फ़ील्ड जैसे लेनदेन प्रकार (आईएनएसईआरटी के लिए डी, डीईएलटीईई के लिए यू, यूपीडीएटी के लिए यू), लेनदेनडेटाइम, आदि, और एक विदेशी कुंजी "sessionId" है, जो अंततः हमें बताता है कि किसने निर्देश भेजा था। यह भी संभव है कि, कुछ कोड के माध्यम से, यह पहचानने के लिए कि किसने और कब (गुस ने सोमवार को रिकॉर्ड बनाया, टिम ने यूनिट प्राइस को ट्यूसडे पर बदल दिया, लिज़ ने गुरुवार को अतिरिक्त छूट जोड़ा)।इस समाधान के लिए

पेशेवरों हैं:

  1. में बताने के लिए "क्या कि किसने और कब", और अपने उपयोगकर्ताओं के लिए यह दिखाने में सक्षम हो! यदि आपका डेटा दोहराया जाता है
  2. (आप SQL कथन का विश्लेषण करने के लिए कुछ कोड की आवश्यकता होगी), और प्रतिकृति विफल रहता है, तो आप इस तालिका के माध्यम से अपने डेटाबेस के पुनर्निर्माण कर सकते हैं

विपक्ष

  1. 100 000 डेटा कर रहे हैं प्रति माह अपडेट Tbl_Transaction में 100 000 रिकॉर्ड मतलब
  2. अंत में, इस तालिका अपने डेटाबेस मात्रा

हमारे चो के 99% हो जाता है बर्फ: 90 दिनों से पुराने सभी रिकॉर्ड स्वचालित रूप से हर सुबह

1

मैंने पहले रणनीति 1 कार्य देखा है। बेशक साइट एक छोटा था।

0

मैं बस डीबी में एक लॉग रिकॉर्ड तालिका छोड़ दूंगा।

UserId पूर्णांक FK
कार्रवाई चार (3) ('में' या 'बाहर')
समय दिनांक समय

आप तालिका में एक नया रिकार्ड ड्रॉप कर सकते हैं जब कोई में लॉग या बाहर या वैकल्पिक रूप से अद्यतन उपयोगकर्ता के लिए अंतिम रिकॉर्ड।

0

मैंने कई प्रणालियों के साथ काम किया है जो आपने सूचीबद्ध पहली विधि का उपयोग किया है, थोड़ी सावधानीपूर्वक योजना बनाने के साथ इसे वास्तव में बहुत अधिक प्रभाव नहीं पड़ता है।

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

यदि आप वास्तव में ऑनलाइन खोज रहे हैं, तो आपका पहला विकल्प सबसे अच्छा है।

0

यदि आपके पास सत्र डेटा है तो बस इसका उपयोग करें। अधिकांश सत्र प्रणालियों में पहले से ही टाइमस्टैम्प होते हैं ताकि वे एक्स मिनटों के लिए उपयोग किए जाने वाले सत्रों की अवधि समाप्त कर सकें।

0

जब भी उपयोगकर्ता सत्र बनाया जाता है, तो आप वैश्विक वैरिएबल बढ़ा सकते हैं, और इसे नष्ट होने पर इसे कम कर सकते हैं। इस तरह आप हमेशा जानेंगे कि किसी भी पल में कितने उपयोगकर्ता ऑनलाइन हैं।

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

0

[अस्वीकरण 1 --- जावा समाधान]

प्रत्येक सार्थक उपयोगकर्ता एक सत्र में दिया जाता है, तो आप प्रत्येक सत्र बना दिया गया है कि और नष्ट कर ट्रैक करने के लिए अपने स्वयं के SessionListener कार्यान्वयन लिख सकते हैं।

[अस्वीकरण 2 --- कोड का परीक्षण नहीं किया या संकलित]

public class ActiveSessionsListener implements HttpSessionListener { 
    public void sessionCreated(HttpSessionEvent e) { 
     ServletContext ctx = e.getSession().getServletContext(); 
     synchronized (ctx) { 
      Integer count = ctx.getAttribute("SESSION_COUNT"); 
      if (count == null) { count = new Integer(0); } 
      ctx.setAttribute("SESSION_COUNT", new Integer(count.intValue() + 1); 
     } 
    } 
    public void sessionDestroyed(HttpSessionEvent e) { 
     ... similar for decrement ...  
    } 
} 

और अपने web.xml में इस रजिस्टर:

<listener-class>com.acme.ActiveSessionsListener</listener-class> 

आशा इस मदद करता है।

0

वेब एप्लिकेशन समाधान के साथ एकमात्र समस्या यह है कि आप अक्सर नहीं जानते कि कोई व्यक्ति साइन आउट करता है। जाहिर है, अगर आपके पास लॉगिन/प्रमाणीकरण आवश्यकता है, तो जब कोई व्यक्ति साइन ऑन करता है, और आपके डेटा एक्सेस कोड के हिस्से के रूप में आप कैप्चर कर सकते हैं, तो जब कोई व्यक्ति डेटाबेस को हिट करता है तो आप लॉग कर सकते हैं। लेकिन आपको यह स्वीकार करना होगा कि जब कोई व्यक्ति लॉग ऑफ करता है तो कैप्चरिंग के विश्वसनीय तरीके पर होगा - कई लोग "लॉग ऑफ" कार्रवाई किए बिना साइट से दूर चले जाएंगे।

0

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

0

मुझे आश्चर्य है कि स्टैक ओवरफ्लो जैसी साइट कैसे करती है?

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

0

वेब ऐप के साथ, "ऑनलाइन" की अवधारणा थोड़ा अस्पष्ट है। सबसे अच्छा आप वास्तव में कर सकते हैं "पिछले एक्स मिनट में एक अनुरोध किया है" या शायद "पिछले एक्स मिनट में प्रमाणित"।

घटनाओं का एक सेट चुनें (अनुरोध किया गया है, अद्यतन किया गया है, प्रमाणीकृत, ...), और उन्हें एक डीबी तालिका में लॉग करें।

एक अलग डीबी