写点什么

作业四:学生考试系统试卷储存方案

作者:许四多
  • 2022-11-06
    浙江
  • 本文字数:1022 字

    阅读完需:约 3 分钟

0.题目 &背景

【考试】

假设每门学科每年 2 次考试,每个学生平均一学期 20 门课,考试采取机考的方式,每门考试的答案 20 判断题、20 选择题、4 道大题(答案 200 字以 内),考试结果永久保存,在校学生能够看到自己曾经的考试结果,

则考试结果记录的存储量为:

• 在校学生:1000 万 * 20(课)* 2(考试次数) * 1000(答案)* 2(学期) * 3(只有前三年考试)= 2.4T。

• 离校学生:每年 250 万,存储量为 0.6T。

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

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

• 提交试卷: 1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 30 分钟 = 1700/每秒。

1.数据结构设计

采用 redis5 种数据结构中的 List 进行储存有顺序的考试题目,key 的组成为:学校_学年_学期_考试科目


2.缓存读写流程

2.1 试卷缓存写入

当试卷出题人完成出题时,可将试卷数据存入缓存中,按照 1 中的数据结构设置好 key,value 为试卷题目,需按照顺序以 json 格式存入缓存中。

2.2 试卷缓存读

考试的时候,学生登录考试系统,开始考试之后,试题内容从 Redis 缓存中根据试题的科目生成的缓存 Key 取出试题内容,可以按照下标一个一个的取出,也可以按照下标批量或者全部将试题取出,具体读出试题的规则看考试系统前端页面的展示形式来定。


3.Redis 集群规模设计

一套试卷内容(20 个判断题+20 个选择题+4 个大题)占用内存的大小的估算,假设一道判断题平均由 50 个字符组成,一个选择题和选项平均由 150 个字符组成,一个大题平均由 200 个字符组成,另外一套试卷中平均出现 20 张图片(每张图片大小 100KB),则一套试卷占用的内存:

判断题:20*50*2 = 2000byte = 2KB

选择题:20*150*2= 6000byte = 6KB

大题:4*200*2=1600bye = 2KB

图片:20*100KB=2M

所以一套试题占用的内存大小估算为:3M。

由于学生总量为 1000 万,分布在各个学校之中,每次考试学校内题目必定相同。所以假设一个学校 2.5 万人,总共有 400 所学校,一个学期 20 门课程,有两个学期且集中在某一个月内考试,所以缓存只需要储存某一年的考试题目即可,后续可持久化至 mysql 数据库中。

这样算下来总的考试题目数据量为:400*20*2*3/1024=46GB

缓存数据较大需要采用 redis 集群方式储存,一主三从的储存方式,请求压力分销至三台 slave 服务器中


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

许四多

关注

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

还未添加个人简介

评论

发布
暂无评论
作业四:学生考试系统试卷储存方案_许四多_InfoQ写作社区