技术文档
 

网上阅卷系统中Cache技术的研究
Research of Cache technology in Oneline Marking System

章丽玲(湖北第二师范学院计算机科学与工程系 湖北武汉 430205)
陈晓苏(华中科技大学计算机科学与工程系 湖北武汉 430205)

 

  摘要

  数据库的访问速度是网上阅卷系的瓶颈,为了提高整个系统的性能,采用Cache技术,将要访问的数据库中的数据预先缓存在应用服务器内存中,并根据系统物理内存大小自动控确定缓冲区大小,同时针对网上阅卷系统中各类数据的特点设计相应的淘汰和预取策略,从而有效地利用缓存空间,节省磁盘I/O时间和网络带宽,提高系统的整个性能。

  关键词

  网上阅卷 Cache

1 引言

   网上阅卷是关于试卷电子化存储、管理和评阅的整体解决方案,可有效地解决传统阅卷模式中存在的效率低下、阅卷质量难以控制以及公正性等问题,是今后考试阅卷的发展方向。然而网上阅卷系统工属于I/O密集和CPU运算密集的系统,如果不针对系统本身的特点,特别是数据库访问的特点作相应的优化措施,系统的性能表现很难达到市场的期望。Cache的意义在于将大量的数据拉到应用层,大部分的访问会在应用层拦截掉,这样结果不仅大大提高了应用程序的速度,也给数据库的服务大大减负,使数据库的访问性能大大提高。本文通过对网上阅卷系统中数据的存储、读取和写入的规律进行分析,合理地组织数据流,利用缓存机制根据应用层服务器系统物理内存大小自动确定缓冲区大小,并针对网上阅卷系统的各类数据设计相应的淘汰和预取策略,从而有效地利用了缓存空间,节省了磁盘I/O时间和网络带宽,提高系统和整个性能。

2 ?Cache技术在网上阅卷系统的需求分析

2.1 网上阅卷系统数据访问特点

   在主观题的网上阅卷系统中,为了实现评卷的客观性和公平性,通常把评阅老师按照角色进行分类,把试题按照主观程度的多少划分为单评题和多评题,比如,填空题和选择题,由于其评分的主观性不强,只需一个老师评阅即可,因此,可把这类试题定义为单评题,而简答、论述、作文这类主观性比较大的题型,则定义为多评题。对多评题,指定两人同时初评,若其评分差值在给定评分范围内,则可终评,否则需根据事先定义的复评规则由更高一级的角色把该卷继续发放给第三人,直至终评。为了对评卷过程中对误差进行有效的控制,采用的手段有自重评、样卷重评等。自重评误差控制的原理是,同一名阅卷老师对同一分试卷,在不同时段的给分应该相同或比较接近,否则,反映了该评卷老师对评分尺度的把握上,存在时紧时松的现象。样卷重评误差控制的原理是事先选定一组有丰富评卷经验的老师(称专家组),由他们对一些有代表性的试卷进行评分,确定一部分标准卷。如果被抽查的评卷人对这些试卷的给分与专家组一致或接近,则认为他对评分标准掌握的较好。

2.2? Cache技术的必要性

  缓存在实际应用中非常常见,通常是在两个存取速度差距很大的对象(比如数据库和应用服务器内存)之间加一个缓存来匹配二者的速度。缓存的恰当使用将极大的改善系统的性能和稳定性。经分析,在网上阅卷应用中,数据访问存在以下的规律性:

  (1)对多评题,如果某道试题图像被调取一次,很可能不久他会被多次调取,或者可以以某种强制机制,使它最先被调取,从而使这道试题优先达到终评。

  (2)如果某道试题的分数记录被使用一次,则它很可能还被多次使用,如多评题。

  (3)试题被调取的次序可以预测。系统规定按记录在数据库中的自然顺序调取试题。如果需要随机取题,则可以在向数据库导入试题时进行打散(shuffle),以换取运行时的性能。

  (4)对于自重评和样卷重评,如果一道题被评过后,很可能不久它还会被多次调取。

  从以上分析可以看出,网上阅卷系统的数据访问中,存在着比较好的的Cache[3]实现条件。为了提高数据的存储效率和网络传导输的效率,可在应用层服务器上增加物理数据库数据的缓存。这样,数据的访问大部分在应用层拦截,当我们接受相同的请求时,我们会把上一次执行的结果缓存在应用程序层,下次访问不需要访问数据库了,这样结果不仅大大提高了应用程序的速度,也给数据库的服务大大减负,使数据库的访问性能大大提高。例如,对于多评题,一道试题从客户端看可能要读取多次,但对数据库而言只需要读取一次,其它时间都是从应用服务器内存中读取,既加快了客户端请求的响应速度,也降低了对应用服务器与数据库之间网络带宽的要求。表1反映了采用Cache前后,读取同一道试题的加速比。

表1

  在表1中,n是客户端从数据库中直接读出一道试题所需要的时间,m是试题在应用服务层Cache中进行查找和其他处理所花的时间,m相对于n可以忽略不计。从表(一)可以看出,多评题取题在Cache命题中的情况下,系统性能会成倍提高。

3 网上阅卷系统中Cache技术的实现

3.1 网上阅卷系统Cache技术实现原理

  网上阅卷系统的数据存取效率主要受到网络的传输效率和数据库的存取效率影响。为了提高两者的效率,在应用层服务日历上这物理数据库建立Cache,数据库在应用层的Cache是物理数据库的一个缓存,即物理数据的一个映射或子集。可以为试题数据表这样的关键数据库表在应用服务器内存中建立一个子集,将数据库最近可能访问到的那部分试题提前调入到应用服务器中,这样,客户端取题时就可以直接从应用服务器中读取,提高了客户端的响应速度。客户端评完一道试题时,应用服务器并不一定将该题从内存中移出,而是看其是否还需要被其它它客户端调取。如果是,则采用一定的算法,使其被优先分发给客户端,直到终评时才从内存中移出。经2.2节分析,在网上阅卷的过程中,造成对数据库频繁访问的主要是客户端提取试题图像和存分操作。可以为试题图像数据表这样的关键数据库表在应用服务器内存中建立一个子集,将数据库中最近可能访问到的那部分试题提前调入到应用服务器中。一方面,客户端取题时可以直接从应用服务器具读取,提高了对客户端请求的响应速度;另一方面,对于多评题,客户嵯评完一道试题时,应用服务器并不一定立即将该试题从内存中移出,而是看是否还需要被其它客户端调取(即未达到终评),如果还需要被调取,则继续保留该试题数据在内存中,直到终评时才从内存中移出。这样,一道试题从客户端看可能要读取多次,但对数据库而言只需要读取一次,其它时间都是从应用服务器内存中读取,既加快了对客户端请求的响应速度,也减少了数据库读取操作,降低了对应用服务器的与数据库之间网络带宽的要求。同样可以为分数数据表在应用服务器内存中建立一个子集。一方面,客户端交的分数将暂时保留在服务器中,不需要等待分数写入数据库中才进行下一步处理,加快了对客户端的响应速度;另一方面,对于多评题,同一试题多个分数之间的比较操作必不可少,此时可以直接从服务器中读出各分数并进行比较,而不是重新从数据库中读出,减少了数据库读操作。

3.2? Cache的存取与淘汰规则

   Cache本身的大小会受到应用服务器物理内存的制约。如果应用服务器物理内存不够,这样Cache中的内容可能被交换到页面内存中,客户端取题的过程将不再是一个内存I/O的过程,而是一个磁盘I/O过程,显然这样会违背设计的初衷。因此需要确定Cache的大小计算方法和淘汰算法。

  假设指定的Cache可用内存大小为n(单位Bytes),一台应用服务器共有m个题块数据(即m个Cache缓冲区),每个题块的平均大小为S1,分别对应U1到Um个用户,则可以为每个用户缓存的试题数为:

   (式3.1)

这样,每个Cache的大小(以记录数为单位)就是:

  (式3.2)

  在网上阅卷系统中,淘汰共有两种形式.一是试题状态达到终评,需要从内存中移除,这是一种淘汰;另外一种是,尽管试题状态未达到终评,但Cache的容量已超过预设的最大值,必须对一部分试题进行淘汰.在Cache的淘汰算法上,一般有LFU和LRU等等算法。都要引入相应的时间开销,而其效果却是无法评估。因此,本文使用的淘汰算法是按搜索顺序淘汰,即在淘汰时,按Cache搜索的自然顺序,找到一个淘汰一个,直到满足Cache的容量要求为止。网上阅卷系统中采用了Map表来实现Cache中记录的存储,因此按搜索顺序淘汰最终转化成随机淘汰。

  对分数记录,除非它的状态已到达终评状态,否则不执行淘汰。每条分数记录要占到近500字节的空间。在一次250人(单机)左右的会话中,新生成的分数记录最多可能达到50000条。即使将这些数据全部保存在内存中,也只占到24M左右,考虑到单评题的分数和已终评的多评题分数不会保存在应用层内存中,这个值还会大缩小。在多评题评分过程中,经常需要用到前次评分的状态,可以从内存中直接查到,从而减少了读取数据库的操作。将这么多分数保存在内存中并不安全,所以本课题的实现中,采用了WriteThrough策略,将生成的分数在保存到应用层内存的同时,还将它直接写到数据库中。显然,这个操作是无法避免的,因此这种策略在不显著增大内存占用的前提下,最有效地减少了数据库的读操作。

3.3Cache设计实例

  基于以上分析,以试题图像数据表为例,设计Cache如下。

  设立数组 arrpaperRec为保存各阶段试题的缓冲区,最多有5种状态的试题(0-4,按评分阶段划分,0表示未被评阅过,4表示已阅评),每个数组元素指向同一类状态的试题集。

  Cache 的分发规则是查找状态标志较大的试题集优先分发给客户端,阅完之后,修改状态标志位并将其转入下一状态试题集中。

  Cache的淘汰规则如下:

  ①对于单评题,阅完之后直接从Cache中淘汰掉。

  ②对于多评题,如果已经达到终评,直接从Cache中淘汰掉。

  ③如果未达到终评,则修改状态标志位,并将其转入下一状态试题集中。

  ④如果Cache的容量不足,即超过了3.2式计算Cache的大小,则需淘汰一部分试题数据,此时,按Cache搜索的自然顺序,找到一个淘汰一个,直到满足Cache的容量要求为止.

  从数据库中预取试题可在以下两种情况下触发:

  ①客户端取题触发

  客户端向应用服务器发出一个取题请求时,应用服务器调用取题函数,这个函数会在Cache中查找合适的试题图像数据.若未查找到合适的数据,则调用相关函数从数据库中预取试题,若查找到,则分发给客户端,并调用相关函数转变该试题数据的状态.客户端取题触发Cache预取试题的过程如图1所示。

 

  

 

 

 

 

 

 

 

  

 

 

②客户端存分触发

  客户端送来存分请求后,应用服务器调用相关函数以判断该被取走试题是应该从Cache中淘汰掉还是应该转入下一状态,并且根据处于未评状态和终评状态的试题图像数据量以及Cache容量决定是否需要调用相关函数来从数据库中预取试题,以便充满被让出Cache的空间.客户端存分触发Cache预取试题过程如图2所示。

 

 

 

 

 

 

 

  

 

 

 

 

 

4 结束语

网上阅卷系统中数据库的访问通常是整个系统的瓶颈,为了提高数据库的存取将效率和网络传输效率,采用Cache技术将要访问的数据缓存在应用服务器上,并根据系统物理内存大小自动确定缓冲区大小,针对网上阅卷系统的各类数据设计相应的淘汰和预取策略,从而有效地利用了缓存空间,节省了磁盘I/O时间和网络带宽,减少数据库访问的负载量,使系统的性能和可伸缩性得到根本性提高。

 

 

 
                                                           返回>>>
首页 | 最新动态 | 公司介绍 | 产品介绍 | 公司客户 | 客服中心 | 下载中心 | 招聘人才 | 联系我们
Copyright © 2005 广州市汇方锐展计算机技术服务有限公司 版权所有