更有效的方法来防止重复投票

时间:2012-10-15 04:53:35

标签: python google-app-engine google-cloud-datastore security voting

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

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

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

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

3 个答案:

答案 0 :(得分: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")

通过这种方式,您可以快速检查用户是否已在某个帖子上投票。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果你只有数百个职位的数百票,这不是一个大数据猪或读/写猪。我假设您将用户列表存储为数据存储上的post enity中的列表。根据您是存储指向用户的long还是存储其电子邮件的字符串,您最多可能每个帖子每个用户使用10个字节。如果你有每个帖子1000个票和1000个帖子,那么你将使用10 MB。此外,它不会增加读/写的成本。如果您希望通过不对索引编制索引并在从数据存储中获取所需信息时搜索该值,则可以降低该成本。