在線考試系統設計思路

0.模塊數據庫

近日對在線考試系統有些想法,因此寫下來和你們討論一下,順便本身也記錄一下這些想法。json

在線考試系統大體有這幾部份內容,下面逐一分析這些模塊和需求瀏覽器

 

1.試題庫緩存

    建立試題庫的意義在於根據知識點建立試題,好比建立一個期中的考試,只須要在試題庫中選擇知識點12。而期末考試須要選擇知識點1234。這樣相似將試題分組更有利於試題的重複的利用,建立試卷配置中也能更快的找到試題。服務器

     而後分析一下試題的類型,實際生活中試題類型基本有這幾種:單選,判斷,多選,填空,問答,做文。前3種題型是能夠經過判斷自動打分的,後三種只能經過人工閱卷。實際在線考試中不多用到後三種的試題,而且必然消耗大量的人力改卷。因此在這裏只考慮單選,判斷,多選的考試試題類型。異步

     試題選項和答案Json的形式保存在試題表中的,主要考慮到這些選項並不經常使用也不多關於選項的查詢,因此試題表不須要在多餘的選項表,試題在編輯的和瀏覽操做能夠經過反序列化json內容。最重要的是當生成試卷的時候這些選項json是要複製起來至關方便,這樣避免當試卷生成之後,試題被修改形成試卷邏輯混亂。性能

 

2.試卷配置spa

  這個模塊是系統中最重要的模塊,配置一張試卷的流程以下   。blog

  • 選擇考試學員或者配置爲開放試卷讓學員自由進入考試(練習考試)
  • 其餘選項配置試卷,好比:考試開始時間,結束時間,及格分數線
  • 設置考試引用的題庫。
  • 設置大題和分數,好比:第一大題單選10題每題5分,第二大題單選10題每題10
  • 組卷就是將題庫的題目填充到大題中,組卷能夠分自動組卷,或者手動組卷。
  • 生成試卷是根據組卷配置將每張試卷的試題抽取出來,生成一個JSON結果集合。學員考試時,直接讀取這個集合。

(要注意的是,生成的試卷JSON結果集合不能修改可是能夠停用試卷,防止學員考過之後的試卷被修改,形成以前的數據和當前的不匹配)內存

 

討論在線考試系統的性能瓶頸在於,大批量學員同時開始考試時,系統配卷消耗大量的性能。個人處理方式是全部的試卷都預先生成,教師能夠選擇隨機由系統組卷仍是手動組卷。系統組卷設置一個組卷份數好比100份,當1000個學生同時進入考試時,將1000張試卷隨機分配一張給學員,生成的份數越多隨機率越高.若是教師只想給讓全部學員考同一份試卷,只須要手動組一張試卷便可

 

 3.學員

      學員是參與考試的主體,學員經過註冊或者是後臺導入的方式進入系統。若是是註冊還須要對應的審覈功能。學員有兩種方式參加考試和練習,一種是主動選擇這張考卷,一種是被推送這張考卷,只有被推送的學生才能能參加考試。有些比較複雜的系統還會有考試的預先報名。經過審覈之後才能獲取考試的權限。

     學員的表結構相對簡單沒什麼可討論的,只是建議學員的主表應該和登陸表分開,學員應該能夠支持多種帳號登錄,好比註冊郵箱、准考證、身份證等登陸方式。

 

 

4.考試過程

      這裏咱們從學員進入考試提及,當學員點擊進入時,隨機分配一個試卷給學員。頁面加載試卷的內容。 而後開闢一個內存空間用hash形式保存學員根據「本次考試ID_試題ID」保存學員的本次考試的答題記錄,學員每次點擊選項,都向服務器提交本題的數據,提交數據時須要帶上時間戳,防止先提交的數據後到達。當學員不當心關閉頁面,或者電腦死機從新打開瀏覽器的時候,咱們將緩存中的數據顯示在頁面上,讓學員繼續考試。

     改卷是一個異步的操做,後臺一個C/s程序實時掃描數據庫,查找已完成答卷而且未改卷的試卷,在內存中提取學員的考試數據一一比對,評卷完成之後將內存的答題內容序列化JSON保存起來(相似試題的保存方式,也能夠考慮保存成文本文件)。查看試卷時先加載試卷,而後加載學員的答卷內容。

 

5.Api

  Api模塊經過REST的方式提供這幾個服務。

  •   考試添加學員
  •   查詢成績(批量或者單個)
  •   建立試卷配置
  •  學員得到試卷(被推送試卷)時發郵件通知,並告知考試地址
  •  提供試卷快速訪問地址,也就是學員點擊這個地址之後輸入帳號(或者SSO登陸)直接進入考試頁面
相關文章
相關標籤/搜索