2008-09-23 10 views
16

बस सोच रहा है कि आप यह कैसे करेंगे। क्या आपके पास कुछ प्रकार की प्रक्रिया होगी जो पिछले X मिनट में हुई सभी कार्रवाइयों के माध्यम से स्कैन की गई हो? क्या आप हर बार किसी भी कार्रवाई के दौरान बैज अपडेट चेक ट्रिगर करेंगे (ऊपर वोट, वोट, टैग, इत्यादि)? ऐसा लगता है कि यह अपेक्षाकृत महंगी प्रक्रिया एक तरह से या दूसरी होगी।स्टैक ओवरव्लो की तरह बैज सिस्टम को कैसे कार्यान्वित किया जाएगा?

+0

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

उत्तर

12

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

+0

ध्यान दें कि यह वास्तव में स्टैक ओवरफ़्लो पर वास्तविक समय नहीं है - यह मेरे कुछ बैज को कुछ पेज रीफ्रेश करने के लिए रीफ्रेश करता है। –

+1

SO एक आवर्ती कार्य की नकल करने के लिए सर्वर कैश कॉलबैक से जुड़े एक हैक का उपयोग करता है। यह पॉडकास्ट में से एक में चर्चा की गई है। –

+0

+1 मुझे अभी एहसास हुआ कि आप इसे प्रत्येक क्रिया पर भी गणना कर सकते हैं, लेकिन इसे एक अलग थ्रेड में करें ताकि साइट प्रदर्शन धीमा न हो। –

0

मैं व्यक्तिगत रूप से एक क्रॉन नौकरी या इसी तरह से नियमित रूप से संसाधित करता हूं। शायद "नकली क्रॉन" प्रवाह प्रणाली पर, जहां मेरे पास एक अदृश्य छवि कॉल होगी और आंतरिक "क्रॉन स्टैक" के माध्यम से जाना होगा ताकि यह देखने के लिए कि क्या करने की आवश्यकता है।

बैज का एक बहुत हालांकि, आवश्यकता नहीं होनी चाहिए कि उन लोगों के साथ करने के लिए बहुत ... वे एक अच्छी तरह से तैयार की गई क्वेरी के साथ किया जा करने के लिए सक्षम होना चाहिए

+1

खाली 1x1 छवियां 2002 है। 200 9 में बेहतर तरीके हैं, जिनमें से कई इस धागे में उल्लिखित हैं। – phidah

2

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

+0

क्यों सभी नकारात्मक वोट? –

2

'हुक/ट्रिगर्स' वाले डेटाबेस का उपयोग करें। फिर आप कुछ राज्य परिवर्तनों पर एक ईवेंट ट्रिगर कर सकते हैं, उदाहरण के लिए कहें, आपके पास एक सारणी है जो किसी दिए गए उत्तर पर प्रत्येक एकल वोट को रिकॉर्ड करती है।

आप जानते हैं कि उत्तर> 10 उपवृत्त == "अच्छा उत्तर", तो आप केवल एक ट्रिगर डाल देंगे जो तब होता है जब LAST_STATE = 9 और NEXT_STATE = 10 और ENTRY_AWARDED_GOODANSWER = false।

पोस्टग्रेस्क्ल ऐसे ऐसे डेटाबेस हैं जो ऐसे ट्रिगर्स का समर्थन करते हैं।

यहां अधिक पढ़ें: http://www.postgresql.org/docs/8.1/static/triggers.html

+0

क्या ट्रांजैक्शन निष्पादित होने पर # ऊपर दिए गए वोट अपडेट करने वाले लेन-देन का इंतजार होगा? या ट्रिगर निष्पादन एसिंक्रोनस है? –

+0

पोस्टग्रेज़ में एमवीसीसी। मुझे समझ में नहीं आता कि यह कैसे काम करता है, लेकिन 2 लोग एक ही पंक्तियों का उपयोग कर सकते हैं और मुद्दों नहीं हैं। ट्रिगर/क्वेरी/ट्रिगरिंग क्वेरी के हिस्से के रूप में होने के लिए, सही ट्रिगर में सही कमांड करके बस परिवर्तन को समाप्त कर सकते हैं। –

1

मैं शायद एसक्यूएल सर्वर में एक सेवा ब्रोकर कतार प्रयोग करेंगे पर कतार और सक्रियण प्रक्रिया एक समय में गतिविधियों का एक समूह ऊपर उठाता है और एक बिल्ला के खिलाफ इसे चलाता कार्यों भेजने के लिए जांच प्रक्रिया। उदाहरण के लिए एक बैज नियम इंजन।

0

खान अकादमी रीयल-टाइम में बैज प्रदान करने के लिए बहुत अधिक समय तक जाती है। वे तर्क देते हैं कि वेबसाइट की गेमी-भावना के लिए यह महत्वपूर्ण है। उनके पास एक बैच नौकरी भी होती है जो समय-समय पर किसी भी मिस्ड बैज के डेटा और पुरस्कार का पुनर्मूल्यांकन करती है।

Ben Kamens, Badges on App Engine: Implementing a real-time...। ब्लॉग जनवरी 2011 में प्रकाशित हुआ था, इसलिए चीजें बाद में बदल गईं।

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