0

已经有一些类似的问题,但我希望得到一个不同的答案。

我在 Python 中的 Google App Engine 上有一个网站,我让注册用户对帖子进行投票,无论是向上还是向下,我只希望每个用户能够投票一次。

我想到并阅读的主要方法是简单地在每个帖子中保留一个已投票用户的列表,并且只向尚未投票的用户显示投票按钮。对我来说,这似乎是一个不雅的解决方案。当数百人对数百个帖子进行投票时,要跟踪这一点需要大量信息来跟踪这样一点点的功能。

虽然我可能是错的。这和我想象的一样多的数据/数据存储写入猪吗?如果我每天有几百张选票,那不是什么大不了的事吗?

4

3 回答 3

3

创建一个看起来像这样的投票类型:

class Vote(db.Model):
    value = db.IntegerProperty() # Or whatever the vote value is.

诀窍是生成投票的密钥作为用户和帖子 ID 的组合。

keyname = str(user.id) + "-" + str(post.id)
vote = Vote.get_or_insert(keyname, value="vote value")

通过这种方式,您可以快速检查用户是否已经对给定的帖子进行了投票。

于 2012-10-15T05:14:26.587 回答
0

您是否尝试过避免重复的 set() 变量类型?

于 2012-10-15T05:12:11.340 回答
0

如果您对数百个帖子只有数百票,这不是大数据或读/写猪。我假设您将用户列表作为列表存储在数据存储的 post 实体中。根据您是存储指向用户的 long 还是存储他们电子邮件的字符串,您可能最多为每个用户每个帖子使用 10 个字节。如果每个帖子有 1000 张选票和 1000 个帖子,那么您将使用 10 MB。另外,它不会增加读/写的成本。如果您愿意,您可以通过不索引该值来降低该成本,并在您从数据存储中获取所需信息时对其进行搜索。

于 2012-10-15T11:57:41.750 回答