设计千万级学生管理系统的考试试卷存储方案
性能估算
在校学生考试结果存储:2.4T
离校学生考试结果存储:每年增长 0.6T
试卷请求 QPS:5 万/s
提交试卷 TPS:1700/s
数据存储和访问 Redis 数据结构设计
何种数据类型存储?
redis 数据存储结构可以使用 string 类型的数据存储。虽然 string 类型的数据存储占用的内存大小比其他类型的要大,但是考虑到试卷不会很多,而且一套数据的大小也不会很大。所以考虑用 string 类型做存储。
数据结构设计
redis 的 key 设计如下:
试卷的 key:"学校 id+学年 id+课程 id+试卷 id"
考试试卷相关数据的读写流程
读取试卷流程
1、用户登陆
2、从 MySQL 读取学生信息,拼凑成如上设计的 key("学校 id+学年 id+课程 id+试卷 id")尝试从 redis 读取数据
3、redis 没有数据,则从数据库读取,如果存在,则更新到缓存,如果不存在,则加载失败
学生答题提交试卷
1、学生根据自己的信息,拼凑成 key("学校 id+学年 id+课程 id+试卷 id")获取试卷
2、学生答题完成后,将答题结果存储到 Hbase
redis 集群的服务器数量和性能
前提:redis 单节点的 TPS 在 5~10W
对于读取试卷的业务场景(试卷请求 QPS:5 万/s)单节点的 redis 完全可以承载。所以我会规划三个节点的 sentinel 集群(sentinel 可以不高可用),其中一台服务器(2C/4G,可以是虚拟机)给 sentinel 节点,另外两台服务器(8C/32G)给 redis 主从节点。
评论