यह एक विशाल परियोजना की तरह लगता है। जटिलता बहुत तेज़ी से बढ़ेगी चाहे आप चाहें या नहीं।
पहली चीज जो मैं करता हूं वह एपीआई के लिए दस्तावेज तैयार करके शुरू होती है।
जब आपके पास दस्तावेज़ हैं, तो आप अपनी परियोजना के लिए आवश्यकताओं को साजिश कर सकते हैं। प्रश्नों में आपने जो चीजें लिखी हैं वह कुछ प्रकार की आवश्यकताओं है, लेकिन बहुत सारणी, बहुत बड़ी तस्वीर जैसी है।
जब आपकी आवश्यकता होती है, तो आप सॉफ्टवेयर इंजीनियरिंग और संरचना के बारे में सोचना शुरू करते हैं।
इस चरण में, मेरी राय में अलग-अलग चीजों को अलग करने का तरीका है। इससे चीजों को प्रबंधित करना आसान हो जाएगा। बाधाओं की समस्याएं ढूँढना, और इसी तरह।
मुझे नहीं पता कि 'अगर उपयोगकर्ता को बैज प्राप्त करना चाहिए' के लिए आपके सिस्टम में ट्रिगर क्या होगा। तो मैं चौकोर समरूपता ले रहा हूँ।
निष्पक्ष होने के लिए, लोग वास्तविक समय में इन सभी अनुरोधों को संसाधित करने के लिए अद्भुत काम कर रहे हैं। मेरा मतलब है, ऐसा लगता है कि वे जांच कर रहे हैं कि मुझे हर अनुरोध पर बैज प्राप्त करना चाहिए या नहीं। तो मेरा चेक इन चेकइन और बैज इतिहास, बैज नियमों, उन्हें एक साथ मच करने के लिए सर्वर पक्ष पर कुछ एल्गोरिदम ट्रिगर कर रहा है, मेरे योग्य बैज को बना रहा है और प्रतिक्रिया में अपना नया बैज दिखा रहा है। बहुत सही लगता है? यह ठीक है!
मुझे विश्वास नहीं है कि वे इस काम को समानांतर में कर रहे हैं। यह सर्वर के लिए बहुत अधिक काम होगा। हालांकि, मेरा चौथा बैज किसी भी अन्य उपयोगकर्ता (बहुत आसान) के साथ बातचीत नहीं कर रहा है, इसलिए समानांतर प्रसंस्करण प्रश्न से बाहर नहीं है।
तो पहला विचार कि कैसे चौकोर काम कर सकता है। लोड बैलेंसर मेरे अनुरोध को भारी लोड सर्वर के लिए आगे बढ़ाता है। और वहाँ सभी काम paralel में किया जाता है। अधिक भार, जितना अधिक सर्वर निकाल दिए जाते हैं। केवल दास डेटाबेस का उपयोग कर फ्लाई पर बैज के लिए सभी गणना करें। उपयोगकर्ता को अपने बैज को प्रस्तुत करें और इस डेटा को वापस मास्टर डीबी पर भेजें। यह संभव है, क्योंकि बैज विभिन्न उपयोगकर्ताओं के बीच बातचीत नहीं कर रहे हैं। एक बैज - एक उपयोगकर्ता इतिहास की आवश्यकता है।
नक्शा का उपयोग करने के लिए एक और समाधान होगा - कम करें। समानांतर में बैज समीक्षा को संसाधित करने के लिए संदेश ब्रोकर का उपयोग करें। आपको एक अनुरोध प्राप्त होता है। संदेश दलाल को संदेश भेजें। संदेश multiple workers पर लैंडिंग है जहां एक कर्मचारी उपयोगकर्ता इतिहास के खिलाफ केवल एक विशिष्ट बैज नियमों की जांच कर रहा है। अंत में, गणना बहुत तेज हो जाएगी।
डीबी संरचना के बारे में। मुझे लगता है कि उपयोगकर्ता को बैज प्राप्त करना चाहिए या नहीं, वास्तव में यह पता लगाने के लिए सभी डीबी के माध्यम से जाने का कोई रास्ता नहीं है। मैं इसे संभालने के सरल, सीधे आगे के रास्ते के साथ जाऊंगा। बस विदेशी कुंजियों, उचित कॉलम प्रकार, सही जगहों पर इंडेक्स का उपयोग करके अच्छी संरचित डीबी बनाएं और आप ठीक होंगे। स्थिर जमीन बनाएं, और इसकी आवश्यकता होने पर ही अनुकूलित करें।
यदि आप वास्तव में प्रोजेक्ट की शुरुआत में अनुकूलन करने के लिए उत्सुक हैं (जो मुझे लगता है कि एक बुरा विचार है), तो मैं अलग-अलग तालिकाओं में सभी बैज से संबंधित डेटा रखूंगा। उस बैज से संबंधित सभी विशिष्ट कॉलम के साथ एक बैज के लिए एक टेबल।
उदाहरण होगा: badge_restaurants (user_id, badge_id, current_level, checkin_count)। नया रेस्तरां बैज प्राप्त करने के लिए आपको केवल तभी जांचना होगा जब उपयोगकर्ता ने checkin_count + 1> = आवश्यक qty किया था और आप आगे देखने के लिए स्वतंत्र नहीं हैं।
बेशक, यह सही समाधान नहीं है। इसे अधिक परिष्कृत तरीके से करने के लिए अधिक अमूर्तता जोड़ा जा सकता है (सैकड़ों टेबल नहीं बनाते)।फिर भी, अधिक जटिल बैज आपको अधिक जटिल समाधान बनाने के लिए प्रेरित करेंगे।
आपके उत्तर के लिए धन्यवाद, लेकिन मुझे नहीं पता कि मुझे वास्तव में क्या देखना चाहिए ... – linkyndy
इसके साथ जाने के दो तरीके हैं। 1) एक ड्रूपल इंस्टॉल पर स्विच करें और इस मॉड्यूल को स्थापित करें। 2) user_badges.install फ़ाइल की जांच करें। यह आपको डेटाबेस के लिए शेमा देना चाहिए। फिर डेटा का प्रतिनिधित्व करने के तरीके को देखने के लिए user_badges.module देखें। – josefnpat
चूंकि कोई रास्ता नहीं है, मैं ड्रूपल पर स्विच कर सकता हूं, मैंने उन फ़ाइलों में कोड को देखा है। एकमात्र चीज जिसे मैंने समझा नहीं है वह है कि ड्रूपल व्यवस्थापक-परिभाषित मील के पत्थर पर उपयोगकर्ताओं को बैज को स्वचालित रूप से कैसे प्रबंधित करता है? मैंने केवल वह हिस्सा देखा है जहां व्यवस्थापक मैन्युअल रूप से बैज असाइन कर सकते हैं। – linkyndy