【发布时间】:2010-12-17 05:10:18
【问题描述】:
我一直在浏览这个网站寻找答案,但我仍然有点不确定如何在其数据库结构和实施中规划一个类似的系统。
在 PHP 和 MySQL 中,很明显会立即获得一些成就(当采取专门的操作时,在 SO 情况下:填写所有个人资料字段),尽管我知道 SO 会在一段时间后更新并分配徽章.拥有如此多的用户和徽章不会造成性能问题(就规模而言:用户和徽章的数量都很高)。
所以我假设的数据库结构很简单:
Badges | Badges_User | User
----------------------------------------------
bd_id | bd_id | user_id
bd_name | user_id | etc
bd_desc | assigned(bool) |
| assigned_at |
但正如一些人所说,最好采用增量样式方法,这样拥有 1,000,000 个论坛帖子的用户就不会减慢任何功能。
然后它会是另一个徽章表,可以是增量的,还是只是上面 badges_user 表中的“进度”字段?
感谢阅读,请关注所需系统的可扩展性(例如数千名用户和 20 到 40 个徽章)。
编辑:为了消除我之前将_at 指定为日期/时间的一些困惑,授予徽章的标准最好放在为每个徽章准备好的查询/函数中,不是吗? (更好的灵活性)
【问题讨论】:
-
一些更受欢迎的徽章是否也比其他徽章检查得更多?
-
你能澄清一下“assigned(bool)”的必要性吗?除非您被分配了徽章,否则在第一种情况下您不会有映射,这不是多余的吗?为什么论坛帖子的数量很重要?
-
我的第一个错误!假设您根据发布的帖子数量分配徽章,即用良好的徽章奖励高帖子 -> 激励用户互动
-
@Fredrik,同意“assigned”,但“assigned_at”意味着您可以跟踪提到的 1,000,000 个论坛帖子徽章之类的内容。他基本上是在一张桌子上跟踪两种徽章。
-
没错,那肯定是个坏主意,不是吗?
标签: php mysql architecture scalability