写点什么

架构营模块四作业

作者:GTiger
  • 2021 年 11 月 20 日
  • 本文字数:743 字

    阅读完需:约 2 分钟

1.Redis 的数据结构

学生的考试试卷根据题号是有顺序的,在老师添加试卷题目时可以按照顺序添加,同时学生读取试卷的时候同样可以按照顺序读取试题。基于此,可以选择 Redis 的 List 数据类型存储试卷内容。具体设计如下:

【出题时数据结构设计】

Key: 学校 ID+考试科目 ID

value: 按题号顺序存储的题目

【答题时数据结构设计】

Key: 学校 ID+学生 ID+考试科目 ID

value: 按题号顺序存储的对应的答案


2.具体的数据读写流程

老师出题的写流程:

老师按照具体的开始科目创建对应的 Key,然后按照题号顺序通过 RPUSH 命令添加题目。

学生读取题目流程:

学生根据考试科目对应的 Key,首先通过 LLEN 命令获取到总题数,然后再根据 LRANGE 命令获取试题。

学生提交试卷的写流程:

学生根据考试科目对应的 Key,可以按照题目顺序通过 RPUSH 命令将对应题目答案添加进去,或者可以通过 LSET 提交指定题号的答案。


3.服务器数量估算

对于 1000 万学生来说,鸡舍每个学校有 1 万学生,那么全国共有 1000 所学校。假设每个学校含有 50 个专业,每个专业每次考试 10 门课程,每次有 3 个年级参加考,假设每份试卷 5000 字,每个学生答案为 1000 字。

由以上假设可得:

所有试卷的容量为:1000(学校)*3(年级)*50(专业)*10(课程)*5000(字数) = 7.5G

所有答案的容量为:1000 万(学生)*10(课程)*1000(字数) = 100G

所以总容量为 107.5G,就按 110G 来算。

由以上结果可以得出每次的考试内容可以存储到一台拥有 128G 内存的服务器上就可以。但时考虑的学生刚开始考试时,请求量会比较大,而提交试卷时相对会小一些,所以可以考虑使用 Redis 的 sentinel 方案,将试卷数据读写做主从分布,有单一主节点处理老师出题和学生提交答案的请求,而由所有节点处理考试开始时的试卷读取请求。综合考虑,可以部署一主二从的主从架构,同时部署三台 sentinel,所以最终可以提供六台服务器作为解决方案。

发布于: 4 小时前阅读数: 9
用户头像

GTiger

关注

还未添加个人签名 2017.12.08 加入

还未添加个人简介

评论

发布
暂无评论
架构营模块四作业