当前位置: 代码迷 >> .NET分析设计 >> 求大神提供在线考试系统设计思路解决方案
  详细解决方案

求大神提供在线考试系统设计思路解决方案

热度:251   发布时间:2016-05-01 22:31:26.0
求大神提供在线考试系统设计思路
现在已经写有一个在线考试系统,但是出了问题,在开考时出现了连接超时导致网络堵塞的现象。
我的设计是这样的   有6个表  试卷(试卷信息表)    题库(题目表   答案选项表)  考生领取试卷(试卷信息表   试卷题目表  题目的答案选项表)
试卷题目是从题库中随机抽取,先是根据抽取条件查询出符合的记录添加到考生领取的题目表 ,然后根据查询出的题目循环查询每题的答案选项再添加进考生领取的答案选项表


这样效率是不是很差  而且很耗费资源?   请各位大神指点
------解决思路----------------------
将考题提取出来存进缓存,然后初始化试卷就只要从缓存读基础数据就行,不要所有的都实时从数据库读取
------解决思路----------------------
上面其实已经说到了“缓存”。不过其实缓存并不应该滥用,你可以把实际访问到的题放到缓存,而从未访问过的题则不占内存。

假设每一个人首先获得一个随机选题组合列表,然后试卷前端动态且异步地去加载每一个试题,这自然是可以的。这里并没有问题,这不直接造成你的数据库瓶颈。实际上瓶颈在于你读取题目实际的内容的那个时候。

比如说一个试卷上有40道题目,假设其中有一道题目是“第3大类第219小题”,假设同时有1950个人的试卷上恰好都有这道题,你的程序到数据库里去这个题目多少次?

应该只有1次,剩下1949次都是从刚产生的缓存中直接取得了!因此缓存单元的“粒度”是你的单条题目。

做到这一点,应该会让你的系统速度快100倍了。那么你接下来还可以做另外一点,就是保证至少有2个以上的业务服务器同时服务,客户端总是连到响应最快的那一个是服务器上去取每一道题的内容。这样不但可以大大提高稳定性,而且cpu占用、缓存使用也分布了,并且具有无限扩展性。从1到2是一个质变,从2到10、到1000则不过是一个量变而已。所以要做到任何需要并发高效率的系统,都至少有2台以上的业务服务服务器。如果可能,如果你的数据库服务器上的系统支持实时自动备份,那么你的业务服务器可以都是访问本地的镜像数据,而不访问主数据库(主数据库只用于写操作),那么就可以进一步大大提高可用性和效率。

最终,几十万用户同时考试(并且每一个人的题目组合都不同),应该可以通过你的运维人员水平扩展系统就能解决。而不需要修改软件。

有人说“做这个读写试题的人月薪4万啊,其它程序员月薪只能给4千啊”。其实那是一种炒作。
  相关解决方案