排行榜数据库设计分析中,为何实时排名实现存在难题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2130个文字,预计阅读时间需要9分钟。
很多网络游戏都设有排行榜,这里专门讨论一下这个排行榜背后的数据库设计。一开始我觉得这应该是一个简单的数据库设计问题。只需要一个实体,没有实体间的关系,也没有复杂的逻辑。
很多网游中都有排行榜,这里就专门讨论一下这个排行榜背后的数据库设计。一开始我觉得这是一个基本的数据库设计问题。只需要有一个实体,没有实体间的关系,没有复杂的逻辑。网络上也搜索不到太多关于这类设计的问题,好像根本不值得为其写个文章。但是在公司专门做了一个月的排行榜数据库设计。才发现问题根本没有看上去那么简单。甚至一篇文章都难以讲明白。不知自己误入歧途了,还是这个问题的确就是很复杂的。所以写个文章讲给大家,或许能有人一语道破。
一开始听到要设计一个排行榜,觉得很简单,一个外键加一个分数列,排名不保存在数据库中,每次查询都实时计算。不就得了?
接下来,就来讨论一下这种方案的可行性。先来描述一下经过最简化的基本要求:
1. 参与排行的设计用户量为1000万左右。
2. 并不要求实时,一小时更新一次。(我一开始的想法很天真,实时不是更好?所以才试了这个实时的排行榜)
3. 排行榜的结果要正确。(最废话的一条,其实很关键,直接导致实时方案作废。)
生产环境,数据库服务器:
CPU:双路4核,至强。
内存:32G。
开发、测试的环境:(以下运行时间数据基于此环境)
CPU:赛扬D 2.66G
内存:1G。
本文共计2130个文字,预计阅读时间需要9分钟。
很多网络游戏都设有排行榜,这里专门讨论一下这个排行榜背后的数据库设计。一开始我觉得这应该是一个简单的数据库设计问题。只需要一个实体,没有实体间的关系,也没有复杂的逻辑。
很多网游中都有排行榜,这里就专门讨论一下这个排行榜背后的数据库设计。一开始我觉得这是一个基本的数据库设计问题。只需要有一个实体,没有实体间的关系,没有复杂的逻辑。网络上也搜索不到太多关于这类设计的问题,好像根本不值得为其写个文章。但是在公司专门做了一个月的排行榜数据库设计。才发现问题根本没有看上去那么简单。甚至一篇文章都难以讲明白。不知自己误入歧途了,还是这个问题的确就是很复杂的。所以写个文章讲给大家,或许能有人一语道破。
一开始听到要设计一个排行榜,觉得很简单,一个外键加一个分数列,排名不保存在数据库中,每次查询都实时计算。不就得了?
接下来,就来讨论一下这种方案的可行性。先来描述一下经过最简化的基本要求:
1. 参与排行的设计用户量为1000万左右。
2. 并不要求实时,一小时更新一次。(我一开始的想法很天真,实时不是更好?所以才试了这个实时的排行榜)
3. 排行榜的结果要正确。(最废话的一条,其实很关键,直接导致实时方案作废。)
生产环境,数据库服务器:
CPU:双路4核,至强。
内存:32G。
开发、测试的环境:(以下运行时间数据基于此环境)
CPU:赛扬D 2.66G
内存:1G。

