写点什么

千万级学生管理系统试卷存储场景

用户头像
文曲星
关注
发布于: 2 小时前

redis 的数据结构设计


试卷 大小为 100KB (可能包含图片) ,根据 学校、年级、课程类型、阶段(学期)、时间戳(考试时间),并设置过期时间


redis 为 K:V 结构


K :试卷编号


试卷编号设置为 : 学校:xxx:年级:xxx:课程:xxx:阶段:xxx:时间戳:20210808


V :考试试题内容,存储 json 格式


{    "编号": "xxxx",    "客观题": [        {            "编号": "xxx",            "类型": "2",            "内容": ""        },        {            "编号": "xxx",            "类型": "03",            "内容": ""        }    ],    "主观题": [        {            "编号": "xxx",            "类型": "02",            "内容": ""        },        {            "编号": "xxx",            "类型": "03",            "内容": ""        }    ]}
复制代码


结果


redis 为 K:V 结构


K:学生学号:xxx:试卷编号:xxx


V:答卷结果,存储 json 格式


{    "学号": "xxxx",    "试卷编号": "xxxxx",    "分数": "",    "客观题": [        {            "编号": "xxx",            "类型": "2",            "答案": "",            "分数": ""        },    ]"主观题": [        {            "编号": "xxx",            "类型": "03",            "答案": "",            "分数": ""        }    ]}
复制代码


读写流程说明


获取试卷:


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。

用户头像

文曲星

关注

还未添加个人签名 2020.08.26 加入

还未添加个人简介

评论

发布
暂无评论
千万级学生管理系统试卷存储场景