写点什么

架构实战营 - 第 6 期 模块四课后作业

作者:乐邦
  • 2022 年 4 月 24 日
  • 本文字数:853 字

    阅读完需:约 3 分钟

架构实战营 - 第 6 期 模块四课后作业

一、数据结构设计

使用有序集合 ZSET 数据结构来存储考试试卷。因为该数据类型,可以更好的满足试卷的增,删,改,查,和排序,按题目获取等需求。

1、Key:学校-院系-专业-课程-试卷 id

2、score:题目顺序编号

3、member:是题目和答案选项。

member 示例:

判断题示例:(1、太阳是圆的吗?:A.正确;B.错误)

选择题示例:(2、太阳是什么形状的?:A.正方形;B.圆形;C.三角形;D.梯形)

答题示例:(3、太阳为什么会是圆形的?为什么不是方形的?)

1、获取到试卷所有内容后,对有序集合做循环遍历,通过冒号(:)对集合成员进行分割,前半部分为题目,后半部分为答案选项。

2、通过第二步得到的答案选项部分以后,再次通过分号(;)对答案选项进行分割,得到全部的答案选项。

3、把上面分割好的数据,包括题目和答案选项,按顺序返给前端浏览器,进行展示。


二、试卷读写分析

老师操作:

添加试题:根据老师当前所在学校-院系-专业-课程,组装出来试卷的 Key。使用ZADD key score1 member1 [score2 member2]命令,向试卷集合当中添加一个或多个题目,或者更新已存在题目的序号。

删除试题:通过 ZREMRANGEBYSCORE key min max 命令,删除试卷中指定题号的试题。

修改试题:先通过 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]命令,返回旧的试题内容,修改完成后,再通过添加试题命令,把修改后的试题添加到试卷当中。

学生操作:

读取试卷题目:学生通过自己所在学校-院系-专业-课程,组装成的 Key,获取试卷内容。根据具体需求,可以一次获取全部试题内容,也可以一次获取一个试题,通过 zrange key start stop 命令来做控制制。


三、根据性能估算结果,得到满足需求的存储方案

1、根据试卷读请求的高并发 5 万/秒,虽然单个 redis 能够满足这个量级的并发请求,但是因为试卷题目基本都用 50 左右汉字组成,所占网络带宽较大,现在准备 3 个 redis 节点,一主二从,来分摊主库的读请求,满足 5 万 QPS 的请求量。

2、然后使用哨兵模式,来完成主从自动切换。因为哨兵的选举算法,为了保证哨兵的高可用,需要配置奇数个哨兵节点,故配置三个哨兵节点即可,组成哨兵集群。

如图所示:


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

乐邦

关注

还未添加个人签名 2018.06.15 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营 - 第 6 期 模块四课后作业_「架构实战营」_乐邦_InfoQ写作社区