写点什么

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

作者:Beyond Ryan
  • 2021 年 11 月 19 日
  • 本文字数:925 字

    阅读完需:约 3 分钟

基于性能估算

以下数据是第六讲中拷贝过来

学生数量:1000w

用户行为:考试

几个关键数据:如图

【考试】

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

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

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

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

试卷存储评估:

每个学生平均 1 学期 20 门课,1 门课 1 年 2 次考试,一个学生 1 年 20*2 =40 次考试(40 份试卷)

平均每道题题干 100 汉字

每份试卷按 20 判断题、20 选择题、4 道大题(答案 200 字以内),每份试卷的存储字节 20*100*2 + 20*100*2*4 + 4 * 100*2 = 20800 字节= 20.8kb ,每年考试存储下来,40*20.8kb = 1MB

注意这只是试卷的数据量,学生的考试数据是存在 HBase 中的


考试存储架构图


1.所有考试的同学的,读的试卷是一样的,所以试卷用 Redis sentinel 存储

2.老师要基于考试结果进行分析:不同分数之间的学习数量;为有些题目大部分同学打错了等场景。基于这些分析场景,用 MySQL 分库分表比较合适

3.学生只需要查看自己的考试结果,老师分析考试结果,只要分析当年的考试结果,学习要保留多年

总体的学生管理系统存储架构图


选择存储系统

单机是否能存储所有数据:是

单机是否能够支撑写性能:是

单机是否能够支撑读性能:是

是否需要自动切换:需要,考试过程中不能出现问题

方案结果:集群选举方案

数据结构设计:

key:学校 ID+课程 ID+学期(一年 2 学期)+考试类型(期中,期末,或者月考等等)

value:选择 Sorted Set 数据结构,因为某一个试卷,不会存在题目一样的情况,所以需要做一下去重的操作,每一份试卷的顺序都是一样的,需要有顺序

具体业务操作:

新增,删除,修改操作会在试卷发布前完成

读写分析:

1.老师(管理员)维护试卷,根据学校 ID+课程 ID+学期 生成 key,根据题目顺序,维护好试卷内容

2.修改和删除,直接根据 key 读取,进行覆盖和删除

3.考生读取试卷,先通过学生 id,根据当前时间计算出考试类型(期中,期末,或者月考等等),在通过学习 ID+课程 ID+学期(一年 2 学期)+考试类型(期中,期末,或者月考等等)去读取试卷内容

服务器数量和性能分析:

根据之前的课程,一台 32 核的服务器,单机 TPS 是 5-10W,能够符合性能要求,因为是集群选举方案

至少需要 3 台,32 核的服务器的服务器,因为考虑到 redis 还可以存其他的一些数据,内存 32G 足矣,硬盘评估没有依据,没有要求,但是不要太小

用户头像

Beyond Ryan

关注

学习如逆水行舟,不进则退 2018.09.07 加入

学习如逆水行舟,不进则退

评论

发布
暂无评论
千万级学生管理系统的考试试卷存储方案设计