写点什么

模块 4 作业

  • 2021 年 11 月 21 日
  • 本文字数:704 字

    阅读完需:约 2 分钟

需求分析

前提:1000 万的学生

分析:假设每个大学有在校生 3 万人,每人每年要参加 2 次考试,每次每人需要参加 15 个课程的考试(假设均为在线考试)。则

单个学校的试卷数量为 15*2=30 个;

总的学校数量为 1000W/3W~=350(近似,且假设每个学校的试卷独立不重复);

总的试卷数量为 350*30=10500 个;

假设每个试卷的大小为 500KB,这个数据只包含相关试题描述,包含选择、判断、思考、计算等各种类型试题(试题中图片内容存储在 CDN 上,将存储地址 url 作为试题描述的一部分,由试题客户端请求到试题后通过图片 url 请求图片内容下载到本地即可)。

则总的数据存储量为 10500*500KB~=5GB。


存储性能分析

基于需求分析相关数据,进行一些冗余性考量和可能的数据变动,目标存储数据量可以设定为 10GB;

这个数据量在 Redis 单机内即可完成存储,同时使用 sentinel 的方案设计来进行主从存储。Redis 采用 1 主 2 从共三个节点,每个节点可以使用 16GB 内存大小。


数据结构

试卷使用 string 方式存储,即试卷 ID 对应内容为试卷本身


读写流程

通过试卷管理后台,将所有试题、选型、描述等内容完成试卷组装(除此外的图片通过后台上传到类似七牛云平台上并获取到 CDN 地址,以便后续试卷答题客户端通过该地址获取到图片内容)。最后将试卷内容直接以 string 的方式插入到 Redis 中。

试卷的修改和以上流程相同。删除则直接在 Redis 通过 id 进行删除即可。

写由对应管理系统触发,写入量很小,基本可以忽略不计。


通过答题系统 ,学生在进行考试前可以通过网络请求,将对应课程的试卷从 Redis 中获取到。由于数据在 Redis 中采用 string 格式存储,对应试卷 ID 在考试前由客户端请求获取到试卷内容后完成本地试卷生成和缓存。学生答题内容则认为是考试系统的一部分,不在本次讨论范围内。


用户头像

还未添加个人签名 2017.11.04 加入

还未添加个人简介

评论

发布
暂无评论
模块4作业