2009-06-03 11 views
20

किसी भी वेबसाइट पर, जैसे स्टैक ओवरफ्लो पर, प्रत्येक प्रश्न में एक दृश्य गणना होती है, और उपयोगकर्ता एक प्रश्न पढ़ता है लेकिन पिछले पढ़ने में इसे दो बार गिना नहीं जाएगा।कैसे "देखें गणना" सर्वोत्तम लागू किया गया है?

मेरे पास कुछ विचार हैं कि इसे कैसे कार्यान्वित किया जाता है और इसका उपयोग करने के लिए कौन सी तालिकाओं का उपयोग किया जाता है।

आपको यह लागू करने का सबसे अच्छा तरीका क्या है?

उत्तर

10

आपके पास कुछ विकल्प हैं जैसा कि मैंने इसे देखा है।

कुकीज़

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

इसके नीचे नकारात्मक यह है कि कुकीज अक्षम होने पर कोई काम नहीं करेगा या कोई सिस्टम को गेम करने का प्रयास कर रहा है।

प्लस तरफ आपको तालिका डेटा के संभावित लाखों/अरबों पंक्तियों के संग्रहण के बारे में चिंता करने की ज़रूरत नहीं है।

डाटाबेस

आप प्रत्येक दृश्य के लिए एक रिकॉर्ड रखें। किसी उपयोगकर्ता को उस रिकॉर्ड से संबंधित कुछ उदाहरण उदा। सदस्य आईडी, आईपी पता; ऐसा कुछ जो उपयोगकर्ता के लिए अद्वितीय होना चाहिए। आईपी ​​आदर्श नहीं है लेकिन पर्याप्त है यदि आपको उपयोगकर्ताओं को लॉगिन करने की आवश्यकता नहीं है।

तो तुम उदाहरण के लिए निम्नलिखित कॉलम के साथ एक मेज के लिए होता है,

  • ArticleID (विदेशी कुंजी)
  • UserID (विदेशी कुंजी)
  • दिनांक

तारीख हो जाएगा कुछ कारणों से उपयोगी,

  • रिपोर्टिंग एक बार जब आप जानते हैं कि प्रत्येक दृश्य रिकॉर्ड किया गया था तो आप बेहतर आंकड़े बना सकते हैं।
  • टाइमआउट देखें। उदाहरण के लिए, आप केवल प्रति घंटे प्रति उपयोगकर्ता एक दृश्य स्टोर करना चाहते हैं। तिथि कॉलम के साथ आप यह कर सकते हैं।

यदि आपका आवेदन इस स्थिति में लोकप्रिय हो जाता है तो आपको स्टोरेज प्रभावों से निपटने की आवश्यकता होगी। मैं एक लोकप्रिय फेसबुक ऐप चलाता हूं जिसके परिणामस्वरूप प्रत्येक दिन 100,000 से अधिक दृश्य पंक्तियां जुड़ती हैं। वास्तव में यदि आपका ऐप इतना लोकप्रिय हो जाता है कि यह एक समस्या बन जाती है तो आपके पास सौदा करने के लिए बहुत अधिक समस्याएं होंगी।

+0

क्या आपके पास कोई उदाहरण कोड है? – AminM

1

जब आपकी साइट के अधिकांश आगंतुक पंजीकृत हैं तो यह सुनिश्चित करना अपेक्षाकृत आसान है कि उनमें से कोई भी दो बार गिना जाता है।

मुझे यकीन नहीं है कि SO मेहमानों द्वारा विचारों की गणना करता है या नहीं। मुझे लगता है कि मैं जांच सकता हूं लेकिन देर हो चुकी है।

+0

मैंने अभी एक प्रश्न कई बार देखा और पहली बार गिनती नहीं बदली। –

+1

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

2

संक्षिप्त उत्तर: यह निर्भर करता है!

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

मैंने पहले व्यक्तियों के दृश्य को संग्रहीत करने के लिए इन-मेमोरी डेटाबेस के साथ कुकीज़ का उपयोग किया है (स्पष्ट कारणों से मैंने डिस्क पर बने डेटाबेस तालिका में वास्तविक दृश्य गणना संग्रहीत की है)। मैं ऐसा कर सकता था क्योंकि आंकड़ों का कोई मतलब नहीं था।

0

मैं कार्यात्मक दृष्टिकोण से उत्तर देने का प्रयास करूंगा। पंजीकृत उपयोगकर्ताओं के लिए

प्रति उपयोगकर्ता विचार - विचार। अज्ञात उपयोगकर्ताओं के लिए - प्रति सत्र।

पहले दृश्य पर वृद्धि दृश्य गणना और आइटम को देखने वाले किसी अन्य व्यक्ति द्वारा महत्वपूर्ण अपडेट के बाद किसी भी दृश्य पर।

निर्माण के समय पोस्टर की

दृश्य की गणना करनी चाहिए नहीं

आप इसे सरल भी कर कल्पना कर सकते हैं, लेकिन मैं एक आदर्श समाधान के बारे में सोच की कोशिश की है।

1

ऐसा लगता है कि स्टैक ओवरफ्लो अतिथि (अनलॉक) उपयोगकर्ताओं को कोई विषय नहीं देखता है। अज्ञात उपयोगकर्ता विचारों को गिनने के साथ समस्या यह है कि आपका काउंटर गेम किया जा सकता है। कोई भी कुकी को हमेशा हटा सकता है और फिर देख सकता है। विचारों को लॉग करना सटीकता के लिए सबसे सुरक्षित समाधान है, लेकिन निश्चित रूप से आपके पास दो प्रमुख समस्याएं हैं: तालिका का आकार और अतिथि/अज्ञात उपयोगकर्ताओं की कमी। यह मुझे आश्चर्यचकित करता है कि स्टैक ओवरफ्लो अतिथि (अनलॉक) उपयोगकर्ताओं को लॉगिंग नहीं कर रहा है। मुझे लगता है कि अधिकांश उपयोगकर्ता Google खोज कर रहे उपयोगकर्ताओं से आएंगे।

9

मेरी वेबसाइट पर मैं अतिथि विचारों और 'डेटा का द्रव्यमान' गिनने के साथ सौदा करता हूं, यह यादृच्छिक संख्या का उपयोग करके विचारों की संख्या को विभाजित करके उत्पन्न करता है।

कहें कि मेरे पास 0 और 1 के बीच एक अच्छा वितरण वाला यादृच्छिक संख्या जनरेटर है, और मुझे किसी विशेष पृष्ठ पर एक दिन में 100,000 विचार मिल रहे हैं। यदि मैं प्रत्येक दृश्य 'लॉगव्यू()' को कॉल करता हूं, लेकिन इसमें एक नया यादृच्छिक संख्या उत्पन्न होता है और केवल यादृच्छिक संख्या < 0.001 पर डीबी को दृश्य लॉग इन करता है, तो 100,000 विचारों के लिए मैं केवल डीबी को लगभग हिट करूंगा 100,000 * 0.001 = 1000 बार।

यदि मैं दृश्य गणना वापस करना चाहता हूं, तो मैं अपने डीबी नंबर को उसी मान से विभाजित करता हूं, उदाहरण के लिए। 1000/0.001 = 100,000। यह निकटतम 1000 विचारों के लिए लगभग सटीक है।

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

इसके अलावा, केवल 1000 दृश्य वाले पृष्ठ को दृश्य संख्या में 1 भी नहीं मिल सकता है, लेकिन यदि आपके पास 100,000 दृश्य वाले पृष्ठ हैं, तो 1000 वाला वाला व्यक्ति बहुत महत्वहीन है।

+0

अच्छा विचार। बांटने के लिए धन्यवाद –

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