关于在线考试系统的问题

公司有一套电力部门的在线考试系统[下称系统],因在同一时只支持50人同时考试,且统一交卷时等待的时间较长,所以考虑对其重新开发。
系统是按常规的三层搭起来的,没有任何的缓存或其它的优化设计。
系统在考试时随机抽取300道题显示到用户界面,在用户点击交卷或考试时间终至时提交表单直接写入数据库,再去计算相关的分值显示到用户界面。
在系统中 从抽题到交卷所有的重担都落在了数据库上,特别是在交卷时。 如果50人同时交卷,第一个交卷的人可以比较快的就看到了自己的成绩,但是那个不幸的被排到最后的那位可能就得等得吐泡泡了。

所以,如果要让系统支持比如800-1000人同时考试,交卷的等待时间在合理的范围内,整体上应该怎么设计?
如果说缓存,该怎样对缓存进行设计 才能经得起高并发的写?

莫有人理...
是不是我问的问题没在点子上,还是说坛里关于这个已经探讨了很多贴了?
有的话 烦请发个地址我看看。

其实要去修改它 只是想自己练练手的。
我能想到的方法是这样的,能不能将缓存设计成两个层次的,第一层用来存所有被抽到试题(或者是系统启动时就获取所有试题),第二层用来存用户抽到的试题(试题不重新从DB获取,而是从第一层中clone)。
然后用户在界面选择了答案后异步提交到服务器修改其自己的那道试题答案。
在交卷或考试时间终止时,系统遍历用户试题进而算出成绩回显到用户界面,同时异步将试题持久化到DB。
[该贴被cgttian于2010-12-02 00:12修改过]

1、先考虑系统类型,这系统比较稳定,就是做试卷,使用DDD的话,能有很不错效果。

2、先抛开技术,考虑领域,看有那些实体需要被跟踪的,用户,试卷,还有其中一个关键“试题”。把这些都缓存起来就是了。你考虑当中缺失试卷实体···使用试卷builder,可以分离出试题生成(组合)策略。关于在系统启动就缓存所有试题的做法,感觉没必要,取卷时只是题目一次查询(并不是每人),并没有损耗多少性能。第二层的做法,感觉多余了,只要加入试卷实体,当试卷生成缓存后,试题已被聚合到当中。

3、还有就是限时设计,是若果用户没点提交,即使改了的答案也算无效;还是自动收卷方式(即是每改一题,改一次缓存)。若是前者可以使用session,若是后者则需时刻修改缓存,时间一到发出事件,持久化所有缓存中的试卷。

上面只是随便提下需要注意的3点而已。

注意:具体项目,我们一般不谈的,因为要考虑很多东西,没有讨论的意义,具体设计是一人一个版本的,只有思想才是交流的地方。值得讨论的东西一般是项目中某些特殊问题,例如职责,解耦,聚合,机制等。

用ajax回答一道题就跟server交互一次,这样就没有最后集中提交的情况了,压力分散了

我之前做过这方面的项目,我的处理是试卷这一块是不用数据库处理的。

一、开设考场时把试卷生成XML格式文件
二、学生考试时读写自己的XML文件
三、交试卷后也只是写自己的XML文件
四、考试结束后后台将所有的XML文件写入到数据库