千万级学生管理系统的考试试卷存储方案
背景
1000 万学生,每个学期 20 门课,每课每年考 2 次试。没次考试 20 道判断题,20 道选择题,4 道大题。
性能估算
请求试卷:1000 万* 20(课)/20(周末不考试)/4(每天 4 堂考试)/1 分钟=250 万请求/分钟≈ 5 万/每秒
提交试卷:提交试卷:1000 万* 20(课)/20(周末不考试)/4(每天 4 堂考试)/30 分钟=1700/每秒
存储系统
沿用现有存储系统: Redis Sentinel
考试试卷存储方案设计
1. 试卷
数据结构采用 String,Key:学校 ID + 试卷 ID -> 试卷内容
映射关系 Hash:学校 ID -> 学生 ID -> 试卷 ID
2. 答卷
数据结构采用 Hash,Key:学校 ID + 试卷 ID -> 学生 ID -> 答卷内容
3. 读写流程
老师提交试卷,试卷内容保存到 Redis (String 学校 ID + 试卷 ID -> 试卷内容),并推送给每个学生(学校 ID -> 学生 ID -> 试卷 ID)
学生登录考试系统(学生 ID,学校 ID),首先获取试卷 ID(Hash 学校 ID -> 学生 ID -> 试卷 ID),然后获取试卷内容(String 学校 ID + 试卷 ID -> 试卷内容),并开始进行答题
答题交卷(Hash 学校 ID + 试卷 ID -> 学生 ID -> 答卷内容 )
4. 服务器数量和性能
Redis 单机性能越在 50K/s 左右,考虑高可用,可采用 2-3 台服务器
评论