微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 网站徽章系统

我目前正在开发基于小部件的网站,完全基于用户社交化.由于声誉系统为吸引用户带来回报,我决定实施其中之一.

现在,我想听听一些关于如何以正确方式实施的解决方案(例如,采用Foursquare的徽章系统).

基本上,我需要能够做到以下几点:

>有一个徽章表,我可以在其中添加,编辑和删除徽章;
>能够启用和禁用徽章;
>能够引入新徽章,但无需编写新代码 – 只需在添加徽章表单中提供一些参数,以便用户获得徽章时应遵循的内容;
>能够实时提供徽章 – 这意味着每当用户完成收到徽章所需的任何内容时,系统应立即知道将徽章交给该用户;
>此外,系统不应该超载“徽章监听器” – 我认为询问每个用户请求与每个徽章要求是耗时的;

话虽如此,我想听听您对如何实施徽章系统(逻辑,数据库架构,方法等)的正确方法的看法

这听起来像一个庞大的项目.无论你是否愿意,复杂性都会快速上升.

要做的第一件事就是为API创建文档.

有文档后,您可以绘制项目的需求.你所写的东西是某种要求,但过于抽象,太大了.

当您有需求时,您开始考虑软件工程和结构.

在这一步中,在我看来,将事情分开是要走的路.这将使事情更容易管理.找到瓶颈错误,等等.

我不知道你的系统会触发“如果用户应该收到徽章”.所以我采用foursquare比喻.

公平地说,这些人正在做出惊人的工作来实时处理所有这些请求.我的意思是,看起来他们正在检查我是否应该在每次请求时收到徽章.因此,我的检查是在服务器端触发一些算法来检查我的签到和徽章历史,徽章规则,将它们组合在一起,创建我应得的徽章并显示我的新徽章作为回应.听起来很对吗?好吧,它是!

我不相信他们正在并行完成所有这些工作.这对服务器来说太过分了.虽然,我的四方徽章没有与任何其他用户交互(更容易),因此并行处理并非不可能.

首先想一想foursquare如何运作.负载均衡器将我的请求转发给不重负载的服务器.并且所有工作都是在paralel中完成的.负载越多,服务器启动的越多.仅使用从属数据库即时进行徽章的所有计算.向用户呈现他的徽章并将此数据发送回主数据库.这是可能的,因为徽章不会在不同用户之间进行交互.一个徽章 – 需要一个用户历史记录.

另一种解决方案是使用map – reduce.使用消息代理并行处理徽章审核.您收到了请求.发送消息给消息代理.消息在multiple workers登陆,其中一个工作人员仅针对用户历史记录检查一个特定徽章规则.最后,计算速度会快得多.

关于db结构.我认为没有办法通过所有数据库来确定用户是否应该收到徽章.我会采用简单,直接的方式来处理这个问题.只需使用外键,正确的列类型,正确位置的索引创建良好的结构化数据库,您就可以了.建立稳定的基础,并在需要时进行优化.

如果你真的渴望在项目开始时进行优化(我认为这是一个坏主意),我会将所有徽章相关数据保存在单独的表中.一个表格用于一个徽章,其中包含与该徽章相关的所有特定列.

示例是:badge_restaurants(user_id,badge_id,current_level,checkin_count).要获得新的餐厅徽章,您只需要检查用户是否确认checkin_count 1> =需要数量,您可以不再查看.

当然,这不是完美的解决方案.可以添加更多抽象以更复杂的方式完成(不创建数百个表).更复杂的徽章仍然会促使您创建更复杂的解决方案.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐