架构实战营 - 模块四 - 作业
千万级学生管理系统的考试试卷存储方案
一、Redis 的数据结构设计
考试试卷的题目以及不同考试版本的试卷,在 MySQL 集群中进行存储和管理,教师根据题库中的题库,或者历史的试卷,来进行组卷,并设置发布考试(包括应试学生、试卷 ID、考试起止时间);在到达计划考试时间前,系统把 MySQL 集群中相应的试卷及题目,复制到 Redis 中;当考试开始时,学生登录后,从 Redis 中读取试卷,并作答。
所以,在 Redis 中,使用 Sorted Sets 数据结构来存储试题:
key:(学校 ID:院系 ID:专业 ID:课程 ID:学期 ID:)考试 ID
score:题目的序号
member:题目标题、类型及选项/内容(可使用 json 的形式存储,包括题目中其他属性或其他格式的内容,如图片、公式等)
用 Sets 来存储临时答案:
key:学生 ID:考试 ID:题目 ID
member:临时答案
另外,可以使用 Hashes 来存储试卷和应试学生的对应关系,便于展示读取
key:学生 ID
field:考试 ID
value:考试状态
key:考试 ID
member:学生 ID
value:考试状态
二、具体的读写流程
分三个步骤:
教师组卷
考试前
考试时
三、Redis sentinel 集群的服务器数量和性能
由于根据业务及学生数量估算:
1. 在校学生考试结果存储:2.4T;
2. 离校学生考试结果存储:每年增长 0.6T;
3. 试卷请求 QPS:5 万/s;
4. 提交试卷 TPS:1700/s。
因此使用三个 Redis Sentinel,一主两从的 Redis 架构方式。
按照以上设计,Redis 中只临时存储试卷信息,所以其配置为 4G 即可。
版权声明: 本文为 InfoQ 作者【michael】的原创文章。
原文链接:【http://xie.infoq.cn/article/9c075f9f1c152968ebd3f10fe】。未经作者许可,禁止转载。
评论