写点什么

架构实战营 - 模块四 - 作业

作者:michael
  • 2022 年 5 月 01 日
  • 本文字数:569 字

    阅读完需:约 2 分钟

架构实战营-模块四-作业

千万级学生管理系统的考试试卷存储方案

一、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:考试状态


二、具体的读写流程

分三个步骤:

  1. 教师组卷


  1. 考试前


  1. 考试时



三、Redis sentinel 集群的服务器数量和性能


由于根据业务及学生数量估算:

1. 在校学生考试结果存储:2.4T;

2. 离校学生考试结果存储:每年增长 0.6T;

3. 试卷请求 QPS:5 万/s;

4. 提交试卷 TPS:1700/s。


因此使用三个 Redis Sentinel,一主两从的 Redis 架构方式。

按照以上设计,Redis 中只临时存储试卷信息,所以其配置为 4G 即可。


发布于: 刚刚阅读数: 3
用户头像

michael

关注

还未添加个人签名 2020.11.14 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营-模块四-作业_架构实战营_michael_InfoQ写作社区