PHP,MySql投票/评分系统

时间:2013-11-12 11:49:42

标签: php mysql codeigniter

首先抱歉文字墙:S

好的,这是我的问题。 我正在使用codeigniter和mysql构建一个Web应用程序。主要的事情是ppl将留下帖子,其他人会评价它,发表评论等等。现在,当我想到它时,每次投票上/下都会对数据库进行更新是非常有用的,对吧?我的意思是,如果现场有500多个人,他们正在阅读+投票帖...这会让我的网站像即时一样崩溃(或者它会,我不知道),因为我会有很多查询每一次投票上/下。   所以,我的问题是,如何解决这个问题?一些全局关联数组,用于存储帖子的id作为键,+ 1 / -1作为值?而且比某种"定时的SQL查询" (如果有这样的事情?)更新投票让我们说每2或5分钟左右,只需刷新"用ajax投票计数器,直到我更新数据库?基本上我认为在我的网站兴旺发达时表现最佳:P。可以通过页面缓存或idk来完成吗?

第二个问题是你不必注册留下帖子/投票其他帖子(我已经想到了一切,你不能发布垃圾邮件/垃圾邮件),但对我来说主要问题是如何限制每个用户每个帖子一票,因为他们是客人?我用Google搜索的内容(非常模糊)是precurtent cookies,所以它是要走的路还是没有?

我不是要求提供示例代码,只是为了一些指导方针,研究什么,如何处理问题,在哪里寻找,以获得解决方案。如果您对如何解决这个问题有一些建议,那将非常感激。

谢谢你,再次,抱歉的文字墙。

2 个答案:

答案 0 :(得分:0)

1)您将投票存储在数据库中并根据需要通过ajax进行更新,让ajax每30秒自动更新最终用户的计数。您最大的问题是表中存储的项目数(10,000的记录意味着您需要实现索引等)。

你只需要有1个php函数,基于$ action,有一个+或者 - 的情况。 SQL查询实际上相当简单。

虽然你会遇到应用程序中某些元素的个别瓶颈,但如果你保留了适当的记录等,你可以随时解决它。只要注意“更新”,它告诉人们当前的投票是什么+自动更新,实际上,1个元素的ajax刷新比再次加载整个页面更好,只是为了显示更新的数量所以它真的是一把双刃剑

2)不要。信任。的。用户。饼干很糟糕。使用它们来查明是否有人篡改数据,然后在怀疑他们时阻止访问。将用户数据再次存储在数据库中但是如果没有登录或用户凭据,您将只能将IP地址和用户代理存储为有用的详细信息 - 再次这些可以被操作客户端,所以你真的可以信任它们?

Gl,hf。

答案 1 :(得分:0)

这是我的0.02美元......

对于投票系统,您没有太多选择,只能立即更新数据库中的表。您可以将更新包含在事务中并实现某种类型的队列,但对于500人我怀疑这是必要的,因为MySQL每秒可以处理几千个查询(当然依赖于查询),而其他数据库可以更进一步。一个好的经验法则是在必要时进行优化,而不是过早地进行优化。所以我对此的建议是继续尝试。

其次,关于注册用户问题 - 假设您设置了具有持久性cookie的投票系统。这意味着一旦你设置了cookie,它就会保留在那里,除非用户将其删除。

现在想象一个恶意用户想要非常糟糕地投票 - 他会尝试提出一个访问URL的脚本,upvotes,删除他的cookie,并从头开始直到他做出10000票。不好。

您可以通过IP地址限制他,但使用代理/ Tor是如此微不足道,以至于它不值得一提。这就是为什么许多系统(包括SO)需要在投票/评论/做任何可能成为非常讨厌的垃圾邮件的行动之前进行注册。

最后,如果您之前从未构建过这样的系统,但是您想学习如何正确地完成工作,那么您首先要做的是研究。谷歌你可以想到的与问题有关的一切。在Stack Overflow中搜索。将整个系统分解成非常小的部分并问自己“我怎么能这样做?”直到你开始在代码方面想象它。一项好的研究将为您节省很多麻烦,并将帮助您提高编程技能。

干杯!