模块四作业 千万级学生管理系统的考试试卷存储方案
采用 zset 结构存储,value 存储题目内容,score 存储题目序号。
具体读写情况如下:
每门考试有一个唯一的编号,比如 2021+课程编号+01/02(01 表示期中考试,02 表示期末考试)。
老师出题时,试卷中每道题的信息(包括题目序号、题目类型、题目内容)存入 Hbase。
考试前几天,将试卷信息同步到 redis 中,采用 zset 结构存储,value 存储题目内容,score 存储题目序号。
开始考试时,从 redis sentinel 读取试卷内容。考虑到试卷内容数据量不大(按每道题 200 字节算,20 判断题、20 选择题、4 道大题一共约 8K 字节),因此可以一次性将全部试卷内容从 redis 读取。(当然,如果某考试试卷内容特殊,超过 1M 字节,则可以分批次读取试卷内容,比如第一次读取前 10 道题。。。)
学生每答完一道题,将答题结果存储在 app/浏览器本地。最终提交试卷时,将答题全部结果存入 mysql,记录如下信息:试卷唯一编号 学生唯一学号 题目序号 答题结果 正确与否 得分
redis sentinel 服务器
根据性能估算结果,读试卷时 tps 在 5 万左右,而 redis 单机 TPS 5~10 万。同时考虑高可用,故采用一主两从节点+3 个哨兵模式。
版权声明: 本文为 InfoQ 作者【小朱】的原创文章。
原文链接:【http://xie.infoq.cn/article/4caf423195f4eb5a74a4878fc】。
本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明。
评论