我目前正在开发一个基于小部件的网站,完全基于用户社交。由于声誉系统为吸引用户而付出了代价,我决定实施其中之一。
现在,我想听听一些关于如何以正确方式实施的解决方案(例如,采用Foursquare的徽章系统)。
基本上,我需要能够做到以下几点:
话虽如此,我想听听您对如何实施徽章系统(逻辑,数据库架构,方法等)的正确方法的意见。
答案 0 :(得分:2)
这听起来像一个庞大的项目。无论你是否愿意,复杂性都会快速上升。
我要做的第一件事就是为API创建文档。
如果您有文档,则可以绘制项目的要求。你所写的东西是某种要求,但过于抽象,太大的画面,如。
当您有需求时,您就会开始考虑软件工程和结构。
在这一步中,我认为将事情分开是要走的路。这将使事情更容易管理。找到瓶颈错误,等等。
我不知道系统中的触发器是“如果用户应该收到徽章”。所以我正在以foursquare进行类比。
公平地说,这些人正在做出惊人的工作来实时处理所有这些请求。我的意思是,看起来他们正在检查我是否应该在每次请求时收到徽章。因此,我的检查是在服务器端触发一些算法来检查我的签到和徽章历史,徽章规则,将它们组合在一起,创建我应得的徽章并显示我的新徽章作为回应。听起来很对吗?好吧,它是!
我不相信他们并行完成所有这些工作。这对服务器来说太过分了。虽然,我的四方徽章没有与任何其他用户交互(更容易),因此并行处理并非不可能。
首先想一想foursquare如何运作。负载均衡器将我的请求转发给不重负载的服务器。所有的工作都是在paralel完成的。负载越多,服务器启动的次数就越多。仅使用从属数据库即时进行徽章的所有计算。向用户提供他的徽章并将此数据发送回主数据库。这是可能的,因为徽章不会在不同用户之间进行交互。一个徽章 - 需要一个用户历史记录。
另一个解决方案是使用map - reduce。使用消息代理并行处理徽章审核。您收到了请求。发送消息到消息代理。邮件正在multiple workers上登陆,其中一名工作人员仅针对用户历史记录检查一个特定徽章规则。最后,计算速度会快得多。
关于db结构。我认为无法通过所有数据库来确定用户是否应该收到徽章。我会采用简单,直接的方式来处理这个问题。只需使用外键,正确的列类型,正确位置的索引创建良好的结构化数据库,您就可以了。建立稳定的基础,并在需要时进行优化。
如果您真的渴望在项目开始时进行优化(我认为这是一个坏主意),我会将所有徽章相关数据保存在单独的表中。一个表格用于一个徽章,其中包含与该徽章相关的所有特定列。
示例如下:badge_restaurants(user_id,badge_id,current_level,checkin_count)。要获得新的餐厅徽章,您只需要检查用户是否确认checkin_count + 1> =需要数量,并且您可以不再查看。
当然,这不是完美的解决方案。可以添加更多抽象以更复杂的方式完成(不创建数百个表)。不过,更复杂的徽章会促使您创建更复杂的解决方案。
答案 1 :(得分:0)
您可以考虑使用Drupal模块User Badges,甚至可以考虑如何设置其架构。
答案 2 :(得分:0)
数据库&活更新:
创建一个以列为条件的表
例如:
答案 - 投票 - 精选答案等......
每次用户提交或用户投票(客户端脚本发送)时,都会获得一个点/ ponts(表格列中的数字增量)。
on返回值(用于检索的客户端脚本),基于与表列关联的条件语句,获得徽章。
例如:
如果票数= 50,则获得 heplful 徽章
if features = 10,获得最佳贡献者徽章
通过客户端脚本我的意思是ajax或json,我不知道如何编写实时源应用程序的脚本
答案 3 :(得分:0)
你应该做的第一件事就是为你的项目建立适当的结构然后开始开发它......你肯定会遇到很多问题,但你可以随时询问,因为你的帖子只是一般性的,任何答案都会赢得'帮助你。
但你的想法很棒:)