这是一个创建于 3711 天前的主题,其中的信息可能已经有所发展或是发生改变。
假设我要做社区排名,不断有新用户加入,每个用户有得分,每天根据得分做个头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.
先谢.
6 条回复 • 2014-07-25 00:51:07 +08:00
|
|
1
loddit 2014-07-23 23:51:47 +08:00
我觉得每天做一个前100名的快照就可以,用什么形式存无所谓,只不过这样新上榜的就不计算上升多少了。
用户获得的每一次积分,都要有记录时间,这样可以回溯出来历史的数据。
|
|
|
2
vixvix 2014-07-24 00:18:42 +08:00
@ loddit 如果我以后要实事排名呢? 每次用户request的时候才生成这个排名表? 好像会很慢。
|
|
|
3
loddit 2014-07-24 00:34:36 +08:00
这时就用快照,就是像相当于生成好的一份历史数据。
|
|
|
4
vixvix 2014-07-24 23:03:27 +08:00
@ loddit 这个快照是啥意思,就单纯生成一个表,还是mysql或者其他dbms的功能?
|
|
|
5
loddit 2014-07-24 23:07:44 +08:00 1
可以是一个表,甚至也可以用文件或者什么。 不过最适合的应该是一个key-value的存储结构吧。
|
|
|
6
vixvix 2014-07-25 00:51:07 +08:00
我也想过用这个小project试试nosql, 不过历史数据还是得用table, 查询方便。
|