我正在编写一个内部网应用程序,它的一个功能大致类似于内容投票 - 与SO,亚马逊和其他许多网站不同.
假设每个可投票的内容都有一个唯一的ID,并且每个用户(他们都经过身份验证)都有一个唯一的ID,最简单的方法似乎是拥有一个"投票"表...
ContentID int
UserID int
VoteValue int
Run Code Online (Sandbox Code Playgroud)
但是每次投票会创造一排 - 拥有数百万条内容和数万名用户,这张桌子将会非常庞大.这是最好的方法吗?我的意思是,如果一个int需要4个字节,每行需要12个字节.如果一百万条内容得到一百票,那就是400MB +的存储空间,是吗?似乎......很多:).即使VoteValue是一个tinyint(可能很好)并且只有1个字节,表中仍然只有几百兆字节.我的意思是sheesh.
有更聪明的方法吗?我应该将这个"投票"表存储在一个单独的数据库中(忽略潜在的数据完整性问题),以便在存储和性能方面将其从"主"数据中划分出来吗?
(我确实意识到,在今天的世界中,400MB并不是一吨 - 但似乎只是为了存储选票,是吗?)
我希望使用我的应用程序向Facebook提交几张图片,并邀请我的朋友在特定的时间间隔内对其进行投票.我的问题是 -
希望对此有所支持.
我有一个设计决定.我需要你的建议.
要求:
选项1 我为我的应用程序设计的二进制协议.
选项2将 我的服务器实现为HTTPServlet.客户端发送post请求,post消息中的查询和servlet在消息中发送响应.但是,我认为对于实时交互,这不是一个好的选择,因为即使对于同一个客户端和会话,也会为每个帖子请求创建一个新线程.请评论一下这个效率.
选项3 使用普通的servlet.将面临与上述相同的问题.
选项4 使用SOAP
选项5 使用REST
选项6 使用Google Wave(我尚未阅读规范)
选项7 建议其他一些协议
现在,我没有与网络服务的经验,但如果是的选项,那么我不介意投资于它的时间.
基本上,我希望选项1的速度和效率具有标准的处理方式.
谢谢
我在投票网站上工作,我想知道如何处理投票.
例如,当您投票支持问题(或答案)时,您的投票会被存储,每次我返回页面时,我都可以看到我已经投票支持这个问题,因为上/下按钮是彩色的.
你是怎样做的?我的意思是我有几个想法,但我想知道它是否会成为数据库的重负荷.
这是我的想法:
写一个帮助者,如果已投票,将检查每个问题
这意味着查询的数量取决于页面上显示的项目数量(通常约为20)
在我的项目上循环获取id,并为每个页面写一个查询,如果投票已经输入或NULL,则返回该查询
看起来不错,因为只有一个查询与页面上的项目无关,但可能会破坏一些MVC /域模型设计,不知道.
当用户登录(或为其创建匿名用户的访客)检索所有投票时,将其存储在会话中,如果投入新投票,则只需将其添加到会话中.
看起来不错,因为除了第一个之外根本不需要任何查询,但是,根据投票的数量(可能是每个用户一堆),可以增加每个用户的会话大小并可能进行身份验证慢.
你好吗?还有其他想法吗?
Hay我需要将投票系统实施到模型中.
我从Mike DeSimone那里得到了一个巨大的帮助,使得这项工作成为首要任务,但我需要扩展他的工作.
这是我目前的代码
视图
def show_game(request):
game = Game.objects.get(pk=1)
discussions = game.gamediscussion_set.filter(reply_to=None)
d = {
'game':game,
'discussions':discussions
}
return render_to_response('show_game', d)
Run Code Online (Sandbox Code Playgroud)
模板
<ul>
{% for discussion in discussions %}
{{ discussion.html }}
{% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)
模型
class GameDiscussion(models.Model):
game = models.ForeignKey(Game)
message = models.TextField()
reply_to = models.ForeignKey('self', related_name='replies', null=True, blank=True)
created_on = models.DateTimeField(blank=True, auto_now_add=True)
userUpVotes = models.ManyToManyField(User, blank=True, related_name='threadUpVotes')
userDownVotes = models.ManyToManyField(User, blank=True, related_name='threadDownVotes')
def html(self):
DiscussionTemplate = loader.get_template("inclusions/discussionTemplate")
return DiscussionTemplate.render(Context({
'discussion': self,
'replies': [reply.html() for reply in …Run Code Online (Sandbox Code Playgroud) 我正在创建一个Web应用程序,用户可以通过单击竖起大拇指或大拇指向某些候选人投票,这些用户将不会在该站点上拥有任何帐户.
什么是最好的技术?是否有必要使用验证码来防止垃圾邮件?
投票数量预计将达到数百万,并且只要我获得95%的准确度,主题就不是很关键.谢谢.
投票比赛似乎得到了那些想要玩游戏系统的人们的关注.我知道我花了很多时间搞砸他们的表单和URL,删除cookie并编写偶尔糟糕的脚本.
有没有办法建立一个只允许一天投票的万无一失的投票系统?Captcha是阻止自动投票的唯一有效方法吗?你是怎么解决这个问题的?我对解决方案的一些想法是跟踪IP或需要电子邮件,但即使这些看起来很容易被绕过.
我想要一些伪代码或白板建议允许在我的网站上进行未经身份验证的投票.我已经查看了这个主题的相关主题,但我认为我的方案不同,足以保证自己的主题.
有3分核心的情况我想支持.
1)经过身份验证的用户"Joe Blow"登录到我的网站并投票.由于他经过身份验证,他只能投票一次.对于他所做的每一次投票,我将他的UserId存储在数据库中
2)未经身份验证的用户"Sally"访问我的网站并投票.由于她未经身份验证,我将在一个名为"Anonymous-Users-From-My-Site"的用户帐户下保存她的投票.
3)未经身份验证的用户"Zoltan"使用我构建的小部件来从托管我的小部件的其他合作伙伴网站访问我的网站.他也可以从该网站投票.我将在名为"Anonymous-Users-From-A-Partner-Site"的合作伙伴用户帐户下保存他的投票.
这里的转折是我需要支持"莎莉"和"佐尔坦"投票无限数量的能力.也许莎莉想在一天内投票500件事.也许Zoltan想在合作伙伴网站上投票200件事.也许Sally没有重新访问该网站一个月,然后回来投票更多的东西.
如何使用cookie实现方案2和3?我是否一起散列所有项目ID的投票?我有什么选择?
FWIW:我计划在统计选票时做出严格的区分.我会明确表示,匿名投票就是这样 - 匿名.在查看结果时,人们会理解使用一定程度的怀疑态度.但我仍然认为允许未经身份验证的用户投票是有价值的,即使他们可以通过使用多个浏览器来游戏系统或在每次投票后删除他们的cookie.如果用户在我的网站上投票必须至少做到这一点,那么我会满意的.
最后:我对使用像EverCookie这样的东西不感兴趣.根据我的需要,这是完全矫枉过正的.
我正在开发一个1-5星级的星级评分系统.在我的数据库中,我将它们保存为:
$stars_1 = 1;
$stars_2 = 6;
$stars_3 = 3;
$stars_4 = 11;
$stars_5 = 22;
$total_votes = 43
Run Code Online (Sandbox Code Playgroud)
当用户使用例如3颗星进行投票时,我将stars_3更新为1,将total_votes更新为1.然后我需要计算平均评分(星级).
我现在这样做,但我没有工作(结果似乎错了):
(($stars_1 + $stars_2 + $stars_3 + $stars_4 + $stars_4) / $total_votes);
Run Code Online (Sandbox Code Playgroud) 有没有办法让一个合理安全的系统投票而无需登录.我现在使用cookie来设置此人是否已投票,并在数据库中插入用户IP.
如果该用户删除了他的cookie,他将能够再次投票.这就是我检查用户的ip是否存在于数据库中以及该IP是否在过去30秒内投票的原因.这样他就不得不删除他的cookie并更改他的IP地址再次投票.
我知道没有100%的防故障解决方案,但是有更安全的方法吗?