高并发选课系统设计
简述
学生选课系统类似于秒杀系统,都是要在一个时间段内抗住高并发。因此我们的学生选课系统可以按照秒杀系统来设计。
学生选课系统的QPS其实远远不及秒杀系统,毕竟一个学校最多也就同时几千个人选课,因此在架构上可以不用设计的太麻烦,只要能抗住高并发,让学生都有操作空间就可。但本文想抛开现实,按照秒杀系统来好好设计一下选课系统。
开发技术
SpringCloud,Mybatis-plus,MySQL,Redis,redisson,RabbitMQ,Quartz
数据表设计
teacher(教师)表
- id
- 其他信息…
course(课程)表
- id
- course_type:课程状态。1-公共任选,2-专业限选
- 其他信息…
student(学生)表
- id
- 其他信息…
courseclass(课程班)表
- id
- course_id:外键,课程id
- teacher_id:外键,教师id
- limit_number:限选人数
- is_confirm:课程班状态。0-未确定(加入选课),1-已确定(不加入选课)
- 其他信息…
courseclass_student(课程班-学生)表
- id
- student_id:外键,学生id
- courseclass_id:外键,课程班id
- state:选课状态。0-退选,1-已选
总结:学生和课程班是n-n关系,课程班和(教师,课程)是n-1关系。
系统流程
-
教师管理员在课程班列表中将想加入选课的课程班的状态修改为“未确定”,在之后的选课中,状态为“未确定”的课程班会参与选课
-
教师管理员选择选课时间,开启选课
-
学生进入选课页面,等待选课
-
选课开始,展示所有参与选课的课程班
-
点击“选课”,进入课程班详情展示页面
-
学生完成选课,状态更新为"已选",已选人数+1,未选人数-1
-
学生可以当即查看任选结果
-
学生可以选择退选已选课程
-
退选后,可以在退选标签里查看结果,同时已选人数-1,未选人数+1