javascript - लीडरबोर्ड रैंकिंग फायरबेस के साथ




database firebase (2)

मेरे पास परियोजना है कि मुझे शीर्ष 20 का लीडरबोर्ड प्रदर्शित करने की आवश्यकता है, और यदि उपयोगकर्ता लीडरबोर्ड में नहीं है तो वे अपनी वर्तमान रैंकिंग के साथ 21 वें स्थान पर दिखाई देंगे।

क्या इसका कोई कारगर तरीका है?

मैं एक डेटाबेस के रूप में Cloud Firestore का उपयोग कर रहा हूं। मेरा मानना ​​है कि यह MongoDB के बजाय इसे चुनना गलत था, लेकिन मैं इस परियोजना के बीच में हूं इसलिए मुझे इसे क्लाउड फायरस्टार के साथ करना चाहिए।

ऐप को 30K यूजर्स इस्तेमाल करेंगे। क्या सभी 30k उपयोगकर्ताओं को प्राप्त किए बिना ऐसा करने का कोई तरीका है?

 this.authProvider.afs.collection('profiles', ref => ref.where('status', '==', 1)
        .where('point', '>', 0)
        .orderBy('point', 'desc').limit(20))

यह वह कोड है जिसे मैंने शीर्ष 20 प्राप्त करने के लिए किया था, लेकिन यदि वे शीर्ष 20 में नहीं हैं, तो उपयोगकर्ता रैंक में वर्तमान लॉग प्राप्त करने के लिए सबसे अच्छा अभ्यास क्या होगा?


एक समाधान जो डैन द्वारा उल्लेख नहीं किया गया है वह Google क्लाउड फ़ंक्शंस के साथ संयुक्त सुरक्षा नियमों का उपयोग है।

हाईस्कोर का नक्शा बनाएँ। उदाहरण:

  • उच्च स्कोर (टॉप 20)

फिर:

  1. उपयोगकर्ताओं को हाईस्कॉर पर लिखने / पढ़ने की सुविधा दें।
  2. दस्तावेज़ / मानचित्र को एक संपत्ति में सबसे छोटा स्कोर दें।
  3. उपयोगकर्ताओं को केवल तभी स्कोर करें जब उसका स्कोर> सबसे छोटा स्कोर हो।
  4. Google क्लाउड फ़ंक्शंस में एक लिखित ट्रिगर बनाएँ जो एक नया हाईस्कोर लिखे जाने पर सक्रिय हो जाएगा। उस फ़ंक्शन में, सबसे छोटा स्कोर हटाएं।

यह मुझे सबसे आसान विकल्प लगता है। यह realtime भी है।


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

यदि २० वें स्थान पर २५० अंक हैं और कुल ३२,००० खिलाड़ी हैं, तो प्रत्येक अंक औसतन १२ curve स्थानों के बराबर है, हालाँकि आप किसी प्रकार के वक्र का उपयोग करना चाह सकते हैं, क्योंकि वे एक बिंदु को ऊपर ले जाते हैं, वे १२ exactly पर नहीं कूदते हैं हर बार स्थान - रैंक में अधिकांश कूद शून्य अंकों के करीब होनी चाहिए।

यह आप पर निर्भर करता है कि आप इसे एक अनुमान के रूप में पहचानना चाहते हैं या नहीं, और आप संख्या में कुछ नमक मिला सकते हैं ताकि यह प्रामाणिक दिखे:

// Real rank: 22,838

// Display to user:
player rank: ~22.8k    // rounded
player rank: 22,882nd  // rounded with random salt of 44

मैं बाद में करूँगा।





google-cloud-firestore