database - 为用户提供徽章

标签 database optimization scalability achievements badge

我正在实现一个网站,我的用户在完成特定目标或任务后将获得徽章。
徽章也有级别/颜色。因此,例如,用户将从 0 级青铜徽章开始,随着他们的进步,他们将获得 1 级青铜徽章,再升几级后,他们将获得 0 级银徽章,依此类推。

我正在构建数据库,但不确定如何将徽章与用户相关联。

我想出的想法是为用户创建 1 个表,为徽章创建 1 个表,以及第三个将 UserID 连接到 BadgeID:

我关心的是优化。随着越来越多的用户加入网站并获得徽章,访问表格和搜索记录不会变慢吗?

我读了 here 关于在Java中使用单例在服务器上定期运行脚本并根据规则检查用户状态以升级满足更高目标的徽章。 这种方法真的可扩展吗?或者我应该遵循这个 Post 反而?

TIA

最佳答案

Wouldn't accessing the table and searching the records become slow as more users join the site and gain badges?

如果您的表格索引正确,则不会有太大影响。

这样想......如果百科全书中的文章数量是原来的五倍,你会花很长时间才能在该百科全书中找到一篇文章吗?

不是真的;因为百科全书是按字母顺序索引的,所以即使文章数量显着增加,查找内容也不会花费太多时间。但是,如果不对其进行索引,则随着百科全书规模的增长,查找内容所需的时间将呈指数级增长。


鉴于您的问题和您链接的资源,我觉得您只是狭隘地关注“徽章”,这可能导致您错过了更一般的情况。

比如徽章总是按顺序发放的,只需要记录某人最后拿到的徽章即可;在那种情况下,他们一定已经获得了最后一个徽章之前的所有徽章。如果它们不是增量的,使用您描述的链接表可能会更好。

尝试用与数据库或数据建模相关的术语来描述您的问题,而不是专门与您的问题领域相关的术语(“徽章”)。这应该可以帮助您弄清楚您应该寻找什么样的信息,并最终引导您采取正确的行动。

关于database - 为用户提供徽章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9354514/

相关文章:

sql - 什么是 "Implicit Database Sequence"?

php - 当他们使用电子邮件登录时从表中获取用户名

python - 帮我选择一个网络服务平台来扩展现有的 python 网络服务

html - body 顶部的宽度 100% 需要滚动

database - Postgresql 复制 CSV 错误 : extra data after last expected column

mysql - 在创建该数据库后无法访问某些数据库

matlab - 创建具有相同行的新表的有效方法,但每行重复不同次数

algorithm - 如何在AMPL中写入 "not equal to"或设置变量参数的条件?

optimization - Bin Packing : Set amount on bins, 想要最小化最大 bin 重量

erlang - 生产 Erlang 部署示例