写点什么

考试试卷存储方案

作者:极客土豆
  • 2022 年 6 月 17 日
  • 本文字数:627 字

    阅读完需:约 2 分钟

仅考虑试卷存储和访问,不考虑学生考试成绩存储方案。已确定使用 Redis 方案。

性能估算

  1. 请求试卷:1000 万 * 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟 = 250 万请求/分钟 ≈ 5 万/每秒。

  2. 写入试卷:读写比 1000 万 :1,写入性能要求忽略不计

  3. 数据大小:假设 1000 个学校,每个学校 20 个专业,每个专业一学期 50 次考试,每套试卷 1MiB

1000*20*50*1MiB ≈ 1TiB(每学期更换试卷,暂不考虑数据增长)

数据结构设计

总体结构

Redis 支持的 String value 大小可以达到 512 MiB。虽然本方案中试卷大小约 1MiB 可以直接存储 JSON String,但大对象意味着单个请求需要传输更多数据量,网络等因素可能引起错误概率提升。所以,本方案中将试卷拆分为 3 个模块,判断题,选择题和问答题。

  1. 降低单个请求数据量,减少错误概率。

  2. 试卷除首页外,其他页的数据请求分散开,降低峰值。

数据结构

key:学校 id+试卷 id+试卷模块

value:- 判断题和问答题采用 Lists

- 择题分题目和选项,Redis 不支持嵌套复杂对象。20 道选择题不适合拆分 key,因为会急速增加请 求数量,所以就直接存 JSON String

业务流程

试卷写入:考试前老师讲试卷录入系统(持久化存储),同时讲试卷按上述结构写入 Redis 集群

试卷读取:开始考试后,所有考试电脑读取试卷首页判断题/选择题。然后根据考试答题速度再依次请求后续题目。

服务器集群

Redis 单机 QPS 在 5-10 万,本方案中对试卷模块进行了 key 拆分,理论峰值 5*3=15 万。从 QPS 和试卷数据量看,单台 Redis 服务基本无法提供可靠服务。所以采用 Redis Cluster 方案做数据 sharding。


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

极客土豆

关注

还未添加个人签名 2018.07.17 加入

还未添加个人简介

评论

发布
暂无评论
考试试卷存储方案_极客土豆_InfoQ写作社区