0.模块数据库
近日对在线考试系统有些想法,因此写下来和你们讨论一下,顺便本身也记录一下这些想法。json
在线考试系统大体有这几部份内容,下面逐一分析这些模块和需求浏览器
1.试题库缓存
建立试题库的意义在于根据知识点建立试题,好比建立一个期中的考试,只须要在试题库中选择知识点1,2。而期末考试须要选择知识点1,2,3,4。这样相似将试题分组更有利于试题的重复的利用,建立试卷配置中也能更快的找到试题。服务器
而后分析一下试题的类型,实际生活中试题类型基本有这几种:单选,判断,多选,填空,问答,做文。前3种题型是能够经过判断自动打分的,后三种只能经过人工阅卷。实际在线考试中不多用到后三种的试题,而且必然消耗大量的人力改卷。因此在这里只考虑单选,判断,多选的考试试题类型。异步
试题选项和答案Json的形式保存在试题表中的,主要考虑到这些选项并不经常使用也不多关于选项的查询,因此试题表不须要在多余的选项表,试题在编辑的和浏览操做能够经过反序列化json内容。最重要的是当生成试卷的时候这些选项json是要复制起来至关方便,这样避免当试卷生成之后,试题被修改形成试卷逻辑混乱。性能
2.试卷配置spa
这个模块是系统中最重要的模块,配置一张试卷的流程以下 。blog
(要注意的是,生成的试卷JSON结果集合不能修改可是能够停用试卷,防止学员考过之后的试卷被修改,形成以前的数据和当前的不匹配)内存
讨论:在线考试系统的性能瓶颈在于,大批量学员同时开始考试时,系统配卷消耗大量的性能。个人处理方式是全部的试卷都预先生成,教师能够选择随机由系统组卷仍是手动组卷。系统组卷设置一个组卷份数好比100份,当1000个学生同时进入考试时,将1000张试卷随机分配一张给学员,生成的份数越多随机率越高.若是教师只想给让全部学员考同一份试卷,只须要手动组一张试卷便可。
3.学员
学员是参与考试的主体,学员经过注册或者是后台导入的方式进入系统。若是是注册还须要对应的审核功能。学员有两种方式参加考试和练习,一种是主动选择这张考卷,一种是被推送这张考卷,只有被推送的学生才能能参加考试。有些比较复杂的系统还会有考试的预先报名。经过审核之后才能获取考试的权限。
学员的表结构相对简单没什么可讨论的,只是建议学员的主表应该和登陆表分开,学员应该能够支持多种帐号登录,好比注册邮箱、准考证、身份证等登陆方式。
4.考试过程
这里咱们从学员进入考试提及,当学员点击进入时,随机分配一个试卷给学员。页面加载试卷的内容。 而后开辟一个内存空间用hash形式保存学员根据“本次考试ID_试题ID”保存学员的本次考试的答题记录,学员每次点击选项,都向服务器提交本题的数据,提交数据时须要带上时间戳,防止先提交的数据后到达。当学员不当心关闭页面,或者电脑死机从新打开浏览器的时候,咱们将缓存中的数据显示在页面上,让学员继续考试。
改卷是一个异步的操做,后台一个C/s程序实时扫描数据库,查找已完成答卷而且未改卷的试卷,在内存中提取学员的考试数据一一比对,评卷完成之后将内存的答题内容序列化JSON保存起来(相似试题的保存方式,也能够考虑保存成文本文件)。查看试卷时先加载试卷,而后加载学员的答卷内容。
5.Api
Api模块经过REST的方式提供这几个服务。