考试试卷存储方案
[数据结构设计]
试卷原始信息使用 redis 的 hase 作为存储试卷的数据结构,key 为试卷的 id,内部各字段定义如下:
name: 试卷的名字
date: 试卷加入的时间
abstract: 试卷的简介
author: 出题人
info: 试卷内容详细信息的 protobuf 或 json 的序列化信息
学生的答卷使用 hash 作为存储的数据结构,key 为学号+试卷 id
student:学生名字
class:所属班级
answer:答卷的 protobuf 或 json 的序列化信息
另外为了便于试卷的管理,可以按照院系、年份、年级等多维度建立试卷的索引。每种索引使用一个单独的 sorted set 存储数据,member 使用试卷 id,socre 可以使用试卷的插入时间,或者所属的年级
为了方便老师批改,使用 sorted set 存储某门课程下所有学生的答卷的 key。 这个 sorted set 的 key 使用年份+课程代号+试卷 id 组成,member 是学生的答卷 key, score 使用提交的时间
[读写分析]
考试开始时,学生从不同的 slave 读区试卷信息。
学生答题结束后,提交时间到 redis master 节点
老师批改时,从 slave 节点拉取当门课程下的学生答卷
[集群数量及性能分析]
使用 3 台哨兵机器组成哨兵集群,可以保证一台哨兵挂了之后,还能继续正确选主操作
试卷的读请求量按照之前课程中估算的 5w/s 计算,一台 redis 足够使用,但是为了应对突发情况,建议部署 2 台 slave+1 台 master
评论