我有一个应用程序,用户可以在其中投票或下载博客文章。为了实现投票功能,我创建了以下模型......
class Upvote(ndb.Model):
user_id = ndb.IntegerProperty(required=True)
blog_id = ndb.IntegerProperty(required=True)
当用户赞成帖子时,我会通过以下方式保存:
Upvote(user_id=User.key.id(), blog_id=Blog.key.id()).put()
并查看用户是否已经对我的查询进行了投票:
Upvote.query(Upvote.user_id=User.key.id(), Upvote.blog_id=Blog.key.id())
这是实施此类投票系统的最有效方式吗?我想确保Upvote
模型似乎变得非常大。当然,我现在过早地进行了优化,但在数百万用户的理论情况下,我想要最有效/最便宜的方法。
答案 0 :(得分:1)
好吧,对于我只调用Vote
的模型,我会添加一个名为BooleanProperty
的{{1}},如果它是一个upvote并设置为upvote
到True
,如果它是一个downvote。
否则你必须重复这个故事以获得downvotes并且没有一些额外的逻辑,你将为用户留出一个空间让同一个帖子投了2票,一个上升,一个下来,恕我直言不会很有道理。
是的,可能会有很多False
个实体,但它们很小并且与其他实体无关,因此可以很好地扩展。