请教能追踪物件排名的表单设计

2014-07-23 23:46:45 +08:00
 vixvix
假设我要做社区排名,不断有新用户加入,每个用户有得分,每天根据得分做个头100名的排行榜,还要显示每个排名的变化,例如今天ABC升了2名,efg排名下降了5名。对于没个用户,还能查到位置的每天变化。请问一下这样的表单要怎么设计才能做到快速查询?

我的想法是一个大表存历史数据

name point date
----------------------
abc 2,700 20140702
efg 2,600 20140702
...
abc 2,100 20140701
efg 2,500 20140701

然后再每天更新排名表

name point date position delta
--------------------------------------------
abc 2,700 20140702 1 +1
efg 2,600 20140702 2 -1


从来没做过数据库设计,知识也就限于学校学的和日常用的pk, m2m之类的。有没有一些入门的表单设计读物? 或者google keyword? 我暂时找到的是db design pattern.

先谢.
3100 次点击
所在节点    MySQL
6 条回复
loddit
2014-07-23 23:51:47 +08:00
我觉得每天做一个前100名的快照就可以,用什么形式存无所谓,只不过这样新上榜的就不计算上升多少了。

用户获得的每一次积分,都要有记录时间,这样可以回溯出来历史的数据。
vixvix
2014-07-24 00:18:42 +08:00
@loddit 如果我以后要实事排名呢? 每次用户request的时候才生成这个排名表? 好像会很慢。
loddit
2014-07-24 00:34:36 +08:00
这时就用快照,就是像相当于生成好的一份历史数据。
vixvix
2014-07-24 23:03:27 +08:00
@loddit 这个快照是啥意思,就单纯生成一个表,还是mysql或者其他dbms的功能?
loddit
2014-07-24 23:07:44 +08:00
可以是一个表,甚至也可以用文件或者什么。
不过最适合的应该是一个key-value的存储结构吧。
vixvix
2014-07-25 00:51:07 +08:00
我也想过用这个小project试试nosql, 不过历史数据还是得用table, 查询方便。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/124193

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX