千万级学生管理系统试卷存储场景
redis 的数据结构设计
试卷 大小为 100KB (可能包含图片) ,根据 学校、年级、课程类型、阶段(学期)、时间戳(考试时间),并设置过期时间
redis 为 K:V 结构
K :试卷编号
试卷编号设置为 : 学校:xxx:年级:xxx:课程:xxx:阶段:xxx:时间戳:20210808
V :考试试题内容,存储 json 格式
复制代码
结果
redis 为 K:V 结构
K:学生学号:xxx:试卷编号:xxx
V:答卷结果,存储 json 格式
复制代码
读写流程说明
获取试卷:
1、试卷提前生成后,依据试卷编号存储到 redis 中,试卷编号设置为 : 学校:xxx:年级:xxx:课程:xxx:阶段:xxx:时间戳:20210808;同时设置试卷的有效期为一天,则设置 redis 过期时间为一天。
2、学生通过请求试卷,拼装好对应的 KEY,在试卷启用当天能够获得试卷信息。
提交试卷
1、学生提交试卷答案到 redis 中。
2、提交后查询 redis 获得数据已经存在后,确认提交完成。
3、redis 中数据定期同步保存到 redis 中,同时将 redis 中缓存数据过期。
存储和性能评估:
存储量:
在校学生一年共生成数据 2.4T,根据 20 门课,每年 2 个学期,每学期考试 2 次来估算,一次大规模考试生成数据大约为 0.6T。
1 台主机内存 128G,则 0.6T 需要 5 台,从节点需要 5 台进行存储,两个集群通过哨兵模式则需要 10 台机器。
写性能:
1700/s TPS,redis 集群无问题。
带宽:
试卷结果大小 2KB,带宽至少要求 40M。
评论