web-dev-qa-db-fra.com

Classement au classement avec Firebase

J'ai le projet que je dois afficher un classement du top 20, et si l'utilisateur ne figure pas dans le classement, il apparaîtra à la 21ème place avec son classement actuel.

Y at-il moyen efficace pour cela?

J'utilise Cloud Firestore comme base de données. Je pense que c'était une erreur de le choisir à la place de MongoDB mais je suis au milieu du projet et je dois donc le faire avec Cloud Firestore.

L'application sera utilisée par 30K utilisateurs. Est-il possible de le faire sans obtenir tous les utilisateurs 30k?

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

C’est le code que j’ai utilisé pour obtenir le top 20, mais quelle sera la meilleure pratique pour obtenir le classement actuel des utilisateurs connectés s’ils ne figurent pas dans le top 20?

15
haim

Une solution qui n'a pas été mentionnée par Dan est l'utilisation de règles de sécurité combinées avec Google Cloud Functions.

Créez la carte des meilleurs scores. Exemple:

  • meilleurs scores (top20)

Ensuite:

  1. Donner aux utilisateurs un accès en écriture/en lecture aux meilleurs scores.
  2. Attribuez aux classeurs document/map le plus petit score dans une propriété.
  3. Laissez les utilisateurs écrire uniquement dans les meilleurs scores si son score est> le plus petit.
  4. Créez un déclencheur d'écriture dans Google Cloud Functions qui sera activé lorsqu'un nouvel highScore est écrit. Dans cette fonction, supprimez le plus petit score.

Cela me semble l’option la plus facile. C'est aussi le temps réel.

0
J. Doe