2017-07-26 8 views
0

私は、ユーザーがブログ投稿をupvoteまたはdownvoteできるアプリを持っています。Google App Engineのソーシャル投票

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

、ユーザーがすでに私をupvotedしているかどうかを確認するために:投票機能を実装するために、私は、ユーザーがポストをupvotesとき、私は経由してそれを保存

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

...以下のモデルを作成しましたクエリ:

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

これは、投票システムを実装する最も効率的な方法ですか?私はそれがUpvoteモデルが非常に大きくなることができるように確かめたい。もちろん、私は今や時期尚早に最適化していますが、何百万人ものユーザーがいる理論的な状況では、最も効率的で安価な方法を欲しがっています。

答えて

1

まあ、1のために私はちょうどVoteモデルを呼びたいと私はそれがupvoteだ場合Trueに設定し、それがdownvoteかどうFalseに設定し、upvoteと呼ばれるBooleanPropertyを追加すると思います。

そうでなければ、下書きの話を繰り返す必要があります。余分なロジックがなければ、IMHOでは作成しない同じ投稿に対して、ユーザーが2票、1冊、1票を投函する余地を残します。多くの意味。

はい、多くの場合、Voteエンティティが存在する可能性がありますが、それらは小さく、互いに関連しておらず、スケーリングはかなり良いです。