2010-12-27 7 views
8

मैं वर्तमान में एक विजेट आधारित वेबसाइट पर काम कर रहा हूं, जो पूरी तरह से उपयोगकर्ता सामाजिककरण पर बनाया गया है। चूंकि एक प्रतिष्ठा प्रणाली उपयोगकर्ताओं को आकर्षित करने के लिए भुगतान करती है, इसलिए मैंने इनमें से एक को लागू करने का निर्णय लिया।वेबसाइट बैज सिस्टम

अब, मैं कुछ समाधान सुनना चाहूंगा कि इसे सही तरीके से कैसे कार्यान्वित किया जाना चाहिए (उदाहरण के लिए, फोरस्क्वेयर बैज सिस्टम)।

असल में, मैं निम्नलिखित करने के लिए सक्षम होने की जरूरत है:

  • एक बैज मेज, मैं कहाँ को जोड़, संपादित और बैज हटाना है,
  • बैज को सक्षम और अक्षम करने में सक्षम हो;
  • एक नया बैज पेश करने में सक्षम हो, लेकिन बिना नया कोड लिखना - उपयोगकर्ता को बैज प्राप्त करने के लिए क्या किया जाना चाहिए इसके संबंध में बस बैज फ़ॉर्म में कुछ पैरामीटर दें;
  • वास्तविक समय में बैज देने में सक्षम हो - जिसका अर्थ यह है कि जब भी कोई उपयोगकर्ता बैज प्राप्त करने के लिए जो कुछ भी प्राप्त करता है, उसे सिस्टम को तुरंत उस उपयोगकर्ता को बैज देने के बारे में पता होना चाहिए;
  • भी, सिस्टम को "बैज श्रोताओं" के साथ अधिभारित नहीं किया जाना चाहिए - मुझे विश्वास है कि प्रत्येक बैज आवश्यकताओं के साथ प्रत्येक उपयोगकर्ता अनुरोध पूछताछ समय लेने वाली है;

ये कहा जा रहा है, मैं कैसे सही तरीके से लागू करने के लिए एक बिल्ला सिस्टम पर अपनी राय (तर्क, डेटाबेस स्कीमा, तरीकों आदि) सुनना पसंद करेंगे

उत्तर

0

आप कर सकते थे Drupal मॉड्यूल के उपयोग पर विचार User Badges या यहां तक ​​कि यह देखकर कि यह अपनी स्कीमा कैसे सेट करता है। वोट - - विशेष रुप से जवाब आदि ...

जो प्रयोक्ता द्वारा एक बनाता है उत्तर देता:

+0

आपके उत्तर के लिए धन्यवाद, लेकिन मुझे नहीं पता कि मुझे वास्तव में क्या देखना चाहिए ... – linkyndy

+0

इसके साथ जाने के दो तरीके हैं। 1) एक ड्रूपल इंस्टॉल पर स्विच करें और इस मॉड्यूल को स्थापित करें। 2) user_badges.install फ़ाइल की जांच करें। यह आपको डेटाबेस के लिए शेमा देना चाहिए। फिर डेटा का प्रतिनिधित्व करने के तरीके को देखने के लिए user_badges.module देखें। – josefnpat

+0

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

0

डाटाबेस & लाइव: अपडेट:
स्थिति
पूर्व के रूप में कॉलम के साथ एक टेबल बना सबमिशन या जब उपयोगकर्ता वोट करते हैं (क्लाइंट-साइड स्क्रिप्टिंग भेजने के लिए), उन्हें एक पॉइंट/पॉंट (टेबल कॉलम में संख्यात्मक वृद्धि) से सम्मानित किया जाता है।


वापसी मान (पुनः प्राप्त करने के लिए क्लाइंट-साइड स्क्रिप्टिंग), कि तालिका स्तंभ के साथ जुड़े रहे सशर्त बयान के आधार पर, एक बैज भी अर्जित कर रहा है।
पूर्व:
अगर वोट = 50, heplful बिल्ला
को प्राप्त करता है, तो = 10 विशेष रुप से प्रदर्शित, शीर्ष योगदानकर्ता प्राप्त बिल्ला


क्लाइंट-साइड स्क्रिप्टिंग से मैं ajax या json, मैं यकीन नहीं कैसे मतलब आप एक लाइव फीड एप्लिकेशन

+0

तालिका के लिए पंक्तियां या कॉलम? और, आपके द्वारा वर्णित विधि का उपयोग करके, इसका मतलब है कि मुझे प्रत्येक उपयोगकर्ता के लिए एक टेबल बनाना है जिसमें उसके वोट/उत्तर आदि का ट्रैक रखना है और पुनर्प्राप्ति के संबंध में, क्या मुझे ** प्रत्येक में अंक देखना होगा * * उपयोगकर्ता को संबंधित बैज असाइन करने के लिए अनुरोध? अगर डेटा बैज करते समय बैज टेबल था और 'बैज चेक' बनाया गया तो यह आसान नहीं होगा? वैसे भी, यह ठीक काम करता है, लेकिन मैं बैज जोड़ने के लिए PHP फ़ाइलों को संशोधित नहीं करता, व्यवस्थापक पैनल से गतिशील रूप से बैज जोड़ना चाहता था। या क्या मैंने आपके कुछ बिंदुओं को याद किया है? – linkyndy

+0

@linkyndy: मेरी गलती, मेरा मतलब कॉलम था। यदि आप कॉलम का उपयोग करते हैं, तो प्रत्येक उपयोगकर्ता का अपना डेटा सेट होगा। उपयोगकर्ता आईडी-उपयोगकर्ता नाम-उत्तर-वोट ... इसके अलावा, चूंकि उपयोगकर्ता वैसे भी जानकारी जमा करने जा रहा है, इसलिए फ़ंक्शन को तालिका कॉलम क्यों नहीं दिखता है यह देखने के लिए कि बैज की स्थिति – Zebra

+0

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

0

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

लेकिन आपका विचार बहुत अच्छा है :)

2

यह एक विशाल परियोजना की तरह लगता है। जटिलता बहुत तेज़ी से बढ़ेगी चाहे आप चाहें या नहीं।

पहली चीज जो मैं करता हूं वह एपीआई के लिए दस्तावेज तैयार करके शुरू होती है।

जब आपके पास दस्तावेज़ हैं, तो आप अपनी परियोजना के लिए आवश्यकताओं को साजिश कर सकते हैं। प्रश्नों में आपने जो चीजें लिखी हैं वह कुछ प्रकार की आवश्यकताओं है, लेकिन बहुत सारणी, बहुत बड़ी तस्वीर जैसी है।

जब आपकी आवश्यकता होती है, तो आप सॉफ्टवेयर इंजीनियरिंग और संरचना के बारे में सोचना शुरू करते हैं।

इस चरण में, मेरी राय में अलग-अलग चीजों को अलग करने का तरीका है। इससे चीजों को प्रबंधित करना आसान हो जाएगा। बाधाओं की समस्याएं ढूँढना, और इसी तरह।

मुझे नहीं पता कि 'अगर उपयोगकर्ता को बैज प्राप्त करना चाहिए' के ​​लिए आपके सिस्टम में ट्रिगर क्या होगा। तो मैं चौकोर समरूपता ले रहा हूँ।

निष्पक्ष होने के लिए, लोग वास्तविक समय में इन सभी अनुरोधों को संसाधित करने के लिए अद्भुत काम कर रहे हैं। मेरा मतलब है, ऐसा लगता है कि वे जांच कर रहे हैं कि मुझे हर अनुरोध पर बैज प्राप्त करना चाहिए या नहीं। तो मेरा चेक इन चेकइन और बैज इतिहास, बैज नियमों, उन्हें एक साथ मच करने के लिए सर्वर पक्ष पर कुछ एल्गोरिदम ट्रिगर कर रहा है, मेरे योग्य बैज को बना रहा है और प्रतिक्रिया में अपना नया बैज दिखा रहा है। बहुत सही लगता है? यह ठीक है!

मुझे विश्वास नहीं है कि वे इस काम को समानांतर में कर रहे हैं। यह सर्वर के लिए बहुत अधिक काम होगा। हालांकि, मेरा चौथा बैज किसी भी अन्य उपयोगकर्ता (बहुत आसान) के साथ बातचीत नहीं कर रहा है, इसलिए समानांतर प्रसंस्करण प्रश्न से बाहर नहीं है।

तो पहला विचार कि कैसे चौकोर काम कर सकता है। लोड बैलेंसर मेरे अनुरोध को भारी लोड सर्वर के लिए आगे बढ़ाता है। और वहाँ सभी काम paralel में किया जाता है। अधिक भार, जितना अधिक सर्वर निकाल दिए जाते हैं। केवल दास डेटाबेस का उपयोग कर फ्लाई पर बैज के लिए सभी गणना करें। उपयोगकर्ता को अपने बैज को प्रस्तुत करें और इस डेटा को वापस मास्टर डीबी पर भेजें। यह संभव है, क्योंकि बैज विभिन्न उपयोगकर्ताओं के बीच बातचीत नहीं कर रहे हैं। एक बैज - एक उपयोगकर्ता इतिहास की आवश्यकता है।

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

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

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

उदाहरण होगा: badge_restaurants (user_id, badge_id, current_level, checkin_count)। नया रेस्तरां बैज प्राप्त करने के लिए आपको केवल तभी जांचना होगा जब उपयोगकर्ता ने checkin_count + 1> = आवश्यक qty किया था और आप आगे देखने के लिए स्वतंत्र नहीं हैं।

बेशक, यह सही समाधान नहीं है। इसे अधिक परिष्कृत तरीके से करने के लिए अधिक अमूर्तता जोड़ा जा सकता है (सैकड़ों टेबल नहीं बनाते)।फिर भी, अधिक जटिल बैज आपको अधिक जटिल समाधान बनाने के लिए प्रेरित करेंगे।

+0

इस पर विस्तृत विवरण लेने के लिए धन्यवाद! – linkyndy

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