写点什么

模块四课后作业 - 设计千万级学生管理系统的考试试卷存储方案

作者:闲人Eric
  • 2022-12-28
    上海
  • 本文字数:925 字

    阅读完需:约 3 分钟

作业要求

基于模块 4 第 6 课的估算结果和 Redis sentinel 的初步方案设计,完善考试试卷存储方案,具体包括:

• 完善 Redis 的数据结构设计,明确具体使用哪种 Redis 数据结构。

• 设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)。

• 对照模块 4 第 6 课的性能估算结果,计算 Redis sentinel 集群的服务器数量和性能。


1.数据结构设计

考试试卷一般是先由老师设计,学生答题完毕后在上传试卷。鉴于这两个步骤,老师设计的试卷只需要在 Redis 中存储一个 key 即可,考试时所有学生访问该 key 就可以看到试卷的内容,但是上传试卷的时候每个学生的答案不一样,所以需要针对每一个学生设计一个 key 来存储试卷。详细的数据结构如下:


1.1 设计、获取试卷数据结构

Key:String,学校 ID + 学院 ID+课程 ID(schoolId + academyId + courseId)

Value:String,采用 JSON 字符串

key 之所以要加上学校 ID+学院 ID+课程 ID,是因为后续如果该平台要多个学校使用的时候,避免键值不重复,另外同一所学校下面可能不同的学院的课程 ID 有重复,因此加上学院 ID 作为 Key 避免逐渐冲突

Value 采用 JSON 字符串来存储,JSON 字符串中的 key 表示题目的编号,value 再使用 json 格式存储题目的信息。这样保证了试卷的内容可以更好的扩展。例如:{"question1":{"type":"选择题",value:"xxxxxx"}}

老师在设计试卷的时候,选择学校 ID+学院 ID+课程 ID,业务系统将老师设计好的试卷拼装成 json,上传到 redis 中。学生在获取试卷的时候,也根据学生的学校 ID+学院 ID+参加考试的课程 ID 来读取试卷。


1.2 上传试卷数据结构

采用 hash 类型

key:学校 ID + 学院 ID + 课程 ID

field:学生学号

value:试卷答题内容(JSON 字符串)


以学校 ID+学院 ID+课程 ID 作为 key,方便老师在批阅试卷的时候查询该课程下所有学生的试卷

以学生学号作为 field 用以区分每个学生的试卷,value 就是每个学生的答题内容


2.录入试卷流程图


读取试卷流程图:

提交、暂存试卷流程图:



Redis sentinel 集群的服务器数量:

【服务器数量】

1 台 redis master+2 台 redis slave,合计 3 台 redis 服务器

3 台 sentinel 机器提供监控确保高可用

 所以总共需要 6 台服务器

【服务器性能】

3 台数据节点服务器,redis 单台性能可达到 5W - 10W,3 台可以达到 15W - 30W,满足 5w 的 QPS 需求;

用户头像

闲人Eric

关注

还未添加个人签名 2018-04-25 加入

还未添加个人简介

评论

发布
暂无评论
模块四课后作业 - 设计千万级学生管理系统的考试试卷存储方案_架构实战营_闲人Eric_InfoQ写作社区