写点什么

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

作者:小虎
  • 2022-11-06
    北京
  • 本文字数:848 字

    阅读完需:约 3 分钟

Redis 数据结构设计

  1. 试卷

  2. key: "paper:学校 ID:年度:学期:科目"

  3. 数据结构:string

  4. 内容:加密后的序列化试卷数据,如通过 aes 加密的试卷数据

  5. 学生试卷关联

  6. key:"student_paper:学校 ID:年度:学期:科目"

  7. 数据结构:有序集合

  8. 内容:field 为学生 ID,score 为考试时间的时间戳

读写流程设计

  1. 试卷编排业务

  2. 老师登录

  3. 通过界面选择年度、学期、科目,编排试卷,保存时将试卷数据进行序列化并加密,存储到以""paper:学校 ID:年度:学期:科目"为 key 的 string 结构 key 中,不能设置有效期

  4. 选择年度、学期、科目,选择要考试的学生,分批设置考试时间,以"student_paper:学校 ID:年度:学期:科目"为 key 的有序集合中,以学生 ID 为 field,考试时间为 score,不能设置有效期

  5. 学生考试服务

  6. 学生登录

  7. 根据当前年度、学期、科目,通过当前时间,以当前时间前 30 分钟、后 1 分钟时间戳为 score 范围,从学生试卷管理 key "student_paper:学校 ID:年度:学期:科目" 中获取学生 ID

  8. 根据当前年度、学科、科目,从试卷 key "paper:学校 ID:年度:学期:科目" 获取试卷信息,在 server 端解密后通过接口返回

服务器数量及性能估算

假设总计 1000 所学校,每门学科每年 2 次考试,每个学生平均一个学期 20 门课,每门考试包括 20 判断题、20 选择题、4 道大题(题干 200 字内)试题永久保存。

则试卷记录的存储量为:

在校学生试卷:1000(学校) * 20 (课) * 4000(试卷) * 2(学期) * 3 (只有前三年考试) = 512M

在线学生试卷关联:1000w(学生) * 20 (课) * 2(学期) * 3 (只有前三年考试) = 1.2G


离校学生:

试卷数量无变化,每年均为 512M + 1.2G/ 4 = 850M 左右


假设学校的考试都安排在某一个月内,考试的时候请求试卷,提交答案,中间答题过程浏览器本地完成,由于考试集中在上午 4 小时和下午 4 小时,且请求试卷集中在考试开始的前 1 分钟,提交答案集中在考试结束前的 30 分钟,因此估算如下:

请求试卷:1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟 = 250 万请求/分钟 ≈ 5 万/每秒。


综上:

内存每年占用约为 1.7G,每年增幅约为 850M

使用 3 台 8G 服务器部署 sentinel 监控服务,3 台 32G 内存 CentOS 部署 redis 主从服务,



用户头像

小虎

关注

还未添加个人签名 2018-03-11 加入

还未添加个人简介

评论

发布
暂无评论
设计千万级学生管理系统的考试试卷存储方案_架构训练营_小虎_InfoQ写作社区