2017-07-26 6 views
0

J'ai une application où les utilisateurs peuvent upvote ou downvote un article de blog. Pour mettre en œuvre la fonctionnalité de vote, j'ai créé le modèle ci-dessous ...Vote social sur Google App Engine

class Upvote(ndb.Model): 
    user_id = ndb.IntegerProperty(required=True) 
    blog_id = ndb.IntegerProperty(required=True) 

Lorsqu'un utilisateur upvotes un poste, je l'enregistrer via:

Upvote(user_id=User.key.id(), blog_id=Blog.key.id()).put() 

Et pour voir si un utilisateur a déjà upvoted I requête:

Upvote.query(Upvote.user_id=User.key.id(), Upvote.blog_id=Blog.key.id()) 

Est-ce la façon la plus efficace de mettre en œuvre un tel système de vote? Je veux m'assurer qu'il semble que le modèle Upvote puisse devenir très grand. Bien sûr, j'optimise prématurément maintenant mais dans une situation théorique avec des millions d'utilisateurs, je veux la méthode la plus efficace/la moins chère.

Répondre

1

Eh bien, pour je voudrais appeler le modèle juste Vote et je voudrais ajouter un BooleanProperty appelé upvote, mis à True si elle est un upvote et mis à False si c'est un downvote.

Sinon, vous devrez répéter l'histoire pour les downvotes et sans logique supplémentaire vous laisser la place à un utilisateur de voter 2 voix, un en haut et en bas, pour le même poste, ce qui ne fait pas IMHO beaucoup de sens.

Oui, il peut y avoir beaucoup d'entités Vote, mais elles sont petites et ne sont pas liées les unes aux autres, ce qui permet une bonne mise à l'échelle.