स्टैक ओवरफ्लो में निफ्टी बैज सिस्टम है। एक बात मैंने देखी है कि बैज को तत्काल सम्मानित नहीं किया जाता है, लेकिन मानदंडों को पूरा करने के बाद कभी-कभी किसी प्रकार की देरी होती है। मैंने इसे अन्य साइटों पर देखा है जिनमें बैज भी हैं।बैज के साथ स्टैक ओवरफ्लो जैसी साइटें कुछ प्रकार की देरी वाली नौकरी का उपयोग क्यों करती हैं यह निर्धारित करने के लिए कि नया बैज कब दिया जाए?
संभवतः ऐसा इसलिए है क्योंकि वे देरी वाली नौकरी का उपयोग कर रहे हैं जो समय-समय पर स्कैन करता है कि कोई नया बैज प्रदान करने की आवश्यकता है या नहीं। मैं इस दृष्टिकोण भी यहाँ की सलाह दी देखें:
How to implement badges?
हालांकि, मैं वास्तव में नहीं दिख रहा है यही कारण है कि यह आवश्यक होना चाहिए, और मेरी कार्यान्वयन में पक्ष रहा हूँ बस एक प्रणाली है जहाँ के बाद एक प्रासंगिक कार्रवाई किया जाता है के लिए उदाहरण के लिए, एक नई टिप्पणी पोस्ट की जाती है, एक चेकअवर्डबैज फ़ंक्शन कहा जाता है, जो जांचता है कि उपयोगकर्ता एक नई टिप्पणी बैज के मानदंडों को पूरा करता है या नहीं।
स्पीडवाइज, मैं सोच रहा था कि सभी प्रासंगिक उपयोगकर्ता आंकड़े उपयोगकर्ता के एक सबडोडल में उपयोगकर्ताशॉट की तरह ही छेड़छाड़ किए जाएंगे ताकि प्रत्येक बार टिप्पणियों की संख्या गिनने की बजाय, यह एक साधारण क्वेरी होगी।
यह मुझे मारता है कि जिस प्रणाली का मैं पक्ष कर रहा हूं वह समझना तेज़ और बहुत आसान होना चाहिए। क्या डाउनसाइड्स मैं यहां लापता हूं, देरी वाली नौकरियों के साथ चीजों को जटिल करना क्यों जरूरी है?
स्पष्टीकरण के लिए: प्रत्येक वास्तविक उपलब्धि उपलब्धियों के कार्यान्वयन के साथ, मैं एक अमूर्त कक्षा उपलब्धियां रखने की योजना बना रहा हूं। प्रत्येक उपलब्धि में एक चेकअवर्डबैज फ़ंक्शन होगा, जिसे नियंत्रक से कहा जा सकता है, या यहां तक कि देरी की नौकरी भी हो सकती है, अगर मुझे उस मार्ग पर जाना चुनना चाहिए, या वास्तव में, यह जांचने के लिए कि उपयोगकर्ता ने एक निश्चित बैज अर्जित किया है या नहीं। इस प्रकार, उपलब्धि कोड सभी केंद्रीकृत किया जाएगा।
(1) और (2) प्रदर्शन दंड इस पर बहुत मामूली होगा। डेटाबेस के लिए केवल एक साधारण एक पंक्ति क्वेरी, इसके बाद कुछ सरल तर्क जैसे (एक्स> 30) (3) क्या आप समझा सकते हैं कि यह (4) वास्तव में ऐसा क्यों नहीं करेगा। मैं एक उपलब्धि वर्ग बनाने की योजना बना रहा हूं, प्रत्येक उपलब्धि एक उप वर्ग के साथ। मुझे प्रासंगिक बैज पर चेकअवर्डबैज को कॉल करने के लिए कॉल करने के लिए अधिकांश मामलों में नियंत्रक कोड में केवल एक पंक्ति जोड़ने की आवश्यकता होगी। –
(3) बस एक उदाहरण: मान लीजिए कि आपके पास एक टिप्पणी हटाने जैसी एक कार्रवाई है, जो किसी भी बैज को नहीं आग लगती है, लेकिन बाद में जब आप कोई टिप्पणी हटाते हैं तो आपको बैज देने की आवश्यकता होती है, आपको सभी कोड ढूंढने के लिए वापस जाना होगा जो एक टिप्पणी हटा देता है और चेकअवर्डबैज को कॉल जोड़ता है। इसे और जटिल परिदृश्यों में कल्पना करें। –
यह स्केल नहीं करता है, क्योंकि जब आपके पास 100,000+ उपयोगकर्ता और 10,000,000 कार्य होते हैं, तो आपको क्वेरी के हर उपयोगकर्ता के कार्य के बाद डेटाबेस को पाउंड करना होगा। यदि, इसके बजाय, आप कार्य को एक (इसके लिए प्रतीक्षा करें) कार्यकर्ता थ्रेड पर ऑफ़लोड करें, तो वह चीज़ पृष्ठभूमि में चल सकती है और समय-समय पर प्रत्येक उपयोगकर्ता के बैज को अपडेट कर सकती है। यह कहकर स्मार्ट हो सकता है, केवल पिछली दौड़ के धागे के बाद से बनाई गई गतिविधियों को स्कैन करना आदि। – BryanH