写点什么

千万学生管理系统试卷存储方案

作者:intelamd
  • 2022 年 6 月 19 日
  • 本文字数:596 字

    阅读完需:约 2 分钟

【数据结构设计】

使用 Redis 的 String 数据类型作为存储。

key: 课程 ID:学期:批次编码

value:json 格式存储为字符串


【持久化策略】

试卷数据比较重要,redis 更适合做缓存,因此考虑将试卷数据写入 MySQL 一份作为持久化存储;

此处可以使用 Write behind 机制,由服务端线程异步写入 MySQL


【读写分析】

1.老师提交设计好的试卷,试卷序列化成 json 格式存储至 redis 中;异步线程会同步试卷数据至 MySQL

2.考试开始,学生请求试卷,先通过课程、学期、批次编码组合成 key 查询 redis 中的试卷信息



【性能、容量预估】
  • 试卷存储空间评估

假设平均每道题 300 字,那么平均每张试卷:44(题数)* 300(字数)* 3(字符编码)=38K 左右,考虑存储为 json,按 40K 来算;

假设平均一个大学在校人数 4 万人,1000 万学生预计 250 所高校。假设每所高校每年 200 门课程要考试

250(高校)* 200(课)* 2(考试次数)* 40k(试卷大小)= 4G 左右;

考虑到估算误差及扩展需要,建议 redis 内存配置至少 8G,推荐 16G 以上

  • 性能评估

redis 单机读取简单 kv 结构能轻松到万,甚至十几万;试卷请求预计 5W/s 的 QPS,因为数据结构并不是特别复杂,所以预计单机的性能即可满足;

网络带宽预估:40K(试卷大小)* 5W/s = 2Gbps 左右

但是因为考虑到高可用,需要采用 sentinel 架构,所以最后的配置是:

Sentinel 节点:3 个组成高可用集群,实现自动切换;

数据节点:一主一丛,主从要同样的配置,组成复制架构,配置均为 4C16G;

带宽:至少保障带宽 2Gbps 以上;

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

intelamd

关注

还未添加个人签名 2018.06.25 加入

还未添加个人简介

评论

发布
暂无评论
千万学生管理系统试卷存储方案_intelamd_InfoQ写作社区