羅尹奇 湯偉
摘? 要: 突發(fā)公共衛(wèi)生事件導致高校無法正常開展線下教學活動,在線課程資源平臺成為解決該問題的有效途徑。為了在短時間內(nèi)實現(xiàn)構(gòu)建在線課程資源平臺,本文提出采用EXCEL作為數(shù)據(jù)存儲對象,并將其中的數(shù)據(jù)加載進內(nèi)存,同時提供數(shù)據(jù)訪問接口,從而實現(xiàn)平臺輕量級研發(fā)與部署。本文一方面解決了高頻率訪問EXCEL性能低下的問題,另一方面保證了平臺部署、維護和升級的靈活性。
關鍵詞: EXCEL;哈希表;數(shù)據(jù)緩存;輕量級研發(fā)
中圖分類號: TP311.5? ? 文獻標識碼: A? ? DOI:10.3969/j.issn.1003-6970.2020.10.053
本文著錄格式:羅尹奇,湯偉. 快速構(gòu)建在線課程資源平臺研究——以電子科技大學圖書館在線課程資源為例[J]. 軟件,2020,41(10):204207
【Abstract】: Public health emergencies lead to the failure of normal offline teaching activities in colleges and universities. Online course resource platform has become an effective way to solve the problem. In order to realize the construction of online course resource platform in a short time, this paper proposes to use excel as the data storage object, load the data into the memory, and provide the data access interface, so as to realize the lightweight development and deployment of the platform. On the one hand, this paper solves the problem of low performance of high frequency access to excel, on the other hand, it ensures the flexibility of platform deployment, maintenance and upgradation.
【Key words】: Excel; Hash table; Data cache; Lightweight development
0? 引言
2020年年初的“新冠疫情”對各行各業(yè)應對重大突發(fā)公共衛(wèi)生事件的能力和管理機制提出了前所未有的挑戰(zhàn)[1]。高校作為人群聚集和流量密集的公共場所,在疫情的影響下無法正常開展線下教學活動。為響應教育部提出的“停課不停教、不停學”的號召[5],各地高校陸續(xù)加強了數(shù)字資源和網(wǎng)絡資源服務的能力,特別是以在線課程、微信公眾號、微博、電子圖書等多種形式為載體[2],有力保證了高校的科研教學活動有序開展。
作為保障科研教學的重要手段之一,在線課程資源平臺將數(shù)字資源按學院和課程的實際需要進行篩選和整合,以資源門戶的形式提供給用戶使用。一方面課程所用的教材教參資源是高校數(shù)字資源的一個子集,通過篩選和整合排除了大部分無關資源,實現(xiàn)課程相關資源的精準投放;另一方面資源訪問權限可控,平臺僅提供資源入口,不改變資源的實際訪問權限規(guī)則,盡可能保證校外遠程訪問安全可靠。
為了快速構(gòu)建在線課程資源平臺,需解決以下三個問題:
(1)課程關聯(lián)問題。傳統(tǒng)的在線資源平臺是圍繞資源建設的,資源本身與學院和所開設課程沒有關聯(lián)性,這就導致用戶必須通過搜索才能找到課程所需的教材教參。因此構(gòu)建在線課程資源平臺時需要考慮將學院-課程-教材教參三者進行合理關聯(lián)。
(2)分類導航問題。部分高校的在線課程平臺僅對教材教參資源進行了簡單羅列,一次性顯示所有課程的資源鏈接,缺少必要的分類和導航[3],用戶面對上千條鏈接的時候仍需進行搜索。因此構(gòu)建的在線課程資源平臺需要按學歷、學院和課程分類組織資源鏈接。
(3)部署升級問題。構(gòu)建在線課程資源平臺是一個逐步迭代和完善的過程,數(shù)據(jù)隨時可能進行更新。這就要求在線課程資源平臺的數(shù)據(jù)管理必須具備輕量級特性,平臺的資源數(shù)據(jù)能夠隨時可編輯,且編輯時不會影響系統(tǒng)的正常訪問。
1? 關鍵技術
1.1? EXCEL與內(nèi)存對象
在一般的網(wǎng)站平臺中數(shù)據(jù)庫通常處于存儲的核心,數(shù)據(jù)的組織具備一定的結(jié)構(gòu)特征(如紅黑樹、B+樹[6,7]等),因此在檢索時能夠充分保證訪問性能。然而數(shù)據(jù)庫的設計、管理和開發(fā)部署過程是重量級的:
(1)在設計上,對象-關系建模過程要求充分分解出業(yè)務場景所需的各種對象實體,以及對象實體之間的關聯(lián)約束,分解是否合理決定了系統(tǒng)研發(fā)的難易程度。
(2)在管理上,數(shù)據(jù)的增刪改查必須符合一致性約束要求,簡單的管理可以通過可視化界面實現(xiàn),但復雜操作仍需通過SQL腳本實現(xiàn),對管理員專業(yè)程度要求較高。
(3)在開發(fā)上,平臺代碼需構(gòu)建到數(shù)據(jù)庫的連接,并通過執(zhí)行SQL語句或ORM映射才能實現(xiàn);部署時則目標服務器必須安裝數(shù)據(jù)庫軟件,同時還需建庫建表。
為實現(xiàn)輕量級開發(fā)和部署在線課程資源平臺,以數(shù)據(jù)庫為存儲核心的架構(gòu)是不適宜的,因此平臺采用了EXCEL作為數(shù)據(jù)存儲核心。一方面EXCEL電子表格界面直觀、操作簡單、功能豐富,數(shù)據(jù)的增刪改查極為方便;另一方面平臺代碼訪問EXCEL的過程為一般的文件訪問,無需建立連接;部署時僅需拷貝文件即可,無需安裝特定軟件。
與數(shù)據(jù)庫相比,EXCEL的數(shù)據(jù)存儲是線性的,這就導致了數(shù)據(jù)訪問的性能不及數(shù)據(jù)庫,所有的查詢均需要從第一行數(shù)據(jù)遍歷。同時EXCEL電子表格存儲在磁盤上,磁盤讀寫性能也相比內(nèi)存低下,并且在面向全校師生大規(guī)模訪問時,由于磁盤讀寫性能限制會出現(xiàn)網(wǎng)站長時間無響應的問題。因此需要將EXCEL數(shù)據(jù)加載進內(nèi)存緩存區(qū),平臺對內(nèi)存對象進行訪問,從而確保平臺能夠及時響應。
1.2? 哈希表
EXCEL數(shù)據(jù)加載進內(nèi)存緩存區(qū)雖然能夠解決磁盤訪問性能低下的問題,但EXCEL數(shù)據(jù)本身的線性組織形式也會導致內(nèi)存訪問性能低效。因此內(nèi)存對象的數(shù)據(jù)結(jié)構(gòu)不能采用線性的組織形式,而應該采用哈希表實現(xiàn)。
哈希表通過關鍵字與存儲對象之間建立映射關系,經(jīng)關鍵字能夠快速定位存儲對象[8]。這樣在訪問特定學院的特定課程時,可以在時間復雜度為O(1)的情況下及時獲取數(shù)據(jù),避免了線性循環(huán)比對,進一步實現(xiàn)了高性能訪問。
雖然哈希表保證了基于Key/Value模式的查詢效率,但在存儲效率上,哈希表由于新數(shù)據(jù)加入會發(fā)生擴容,空間復雜度遠高于線性存儲,因此在加載EXCEL時需要保證系統(tǒng)具有足夠的內(nèi)存空間防止數(shù)據(jù)溢出。
1.3? 技術框架
為實現(xiàn)快速構(gòu)建在線課程資源平臺,系統(tǒng)基于Java Web開發(fā),并且實現(xiàn)了MVC三層架構(gòu)模型,整合了多種當前較為流行的框架,從而降低了開發(fā)難度,提升了開發(fā)效率[9,10]。所用框架信息如表1。
2? 體系架構(gòu)與實現(xiàn)
2.1? 整體架構(gòu)設計
為了實現(xiàn)資源分類導航,課程信息不采用列表的形式一次性顯示,而是采用樹形結(jié)構(gòu)分層逐步顯示。平臺組織架構(gòu)如圖1。
其中首頁作為平臺門戶入口,提供了頂層聚合視圖,包含了各個學院的分類鏈接;用戶根據(jù)自身專業(yè)、所在學院和學歷,選擇對應的鏈接進入該學院開設的課程列表頁面,該頁面也包含了各個課程的分類鏈接;用戶選擇對應課程后進入課程詳情頁面,此時該頁面包含了關于該課程的所有詳細信息,包括課程名、教材列表、教參列表;最后用戶選擇某一教材教參后實現(xiàn)訪問該數(shù)字資源。整個過程采用了樹狀分支結(jié)構(gòu)逐步展開,避免了將全部資源列表直接顯示給用戶,保證了用戶可以聚焦自身關注的課程信息。
為實現(xiàn)上述組織架構(gòu),并方便后續(xù)系統(tǒng)持續(xù)更新,平臺采用了典型的MVC三層架構(gòu),其中與基于數(shù)據(jù)庫的系統(tǒng)不同的是,平臺的數(shù)據(jù)存儲采用了EXCEL,同時在Controller與Model兩層之間,加入了緩存機制,從而確保大規(guī)模網(wǎng)站訪問時的性能。平臺整體架構(gòu)設計如圖2。
(1)EXCEL:資源鏈接的存儲實體,用于存放教參/教材數(shù)據(jù)。其中教參/教材數(shù)據(jù)必須遵循自義定的數(shù)據(jù)協(xié)議規(guī)范,以便網(wǎng)站解析使用。
(3)Model:完成對EXCEL的解析,產(chǎn)生內(nèi)存對象,該對象受Ehcache緩存池托管,根據(jù)失效時間策略定期重復加載EXCEL。
(3)Controller:提供一系列Action邏輯實體,根據(jù)客戶端傳遞的參數(shù)返回相應的視圖。
(4)View:采用JSP作為視圖,執(zhí)行頁面邏輯,生成對應的網(wǎng)頁,并將網(wǎng)頁返回給客戶端,產(chǎn)生最終瀏覽器可見的結(jié)果。
2.2? 數(shù)據(jù)設計
(1)EXCEL字段設計
為了實現(xiàn)平臺分類導航,EXCEL中不僅存儲關鍵數(shù)據(jù),同時還需對每一條數(shù)據(jù)附加標簽字段,用于指示該條數(shù)據(jù)的性質(zhì)。由于平臺的核心功能是將教材教參資源展示給用戶,因此EXCEL中的每一條數(shù)據(jù)是圍繞教材教參URL構(gòu)建的。EXCEL字段說明如表2。
表2中學生類型標志、開課學院ID、課程ID為分類標志,其作用是提供查詢參數(shù)發(fā)送到服務器,服務器根據(jù)參數(shù)值實現(xiàn)逐級訪問。由于EXCEL與數(shù)據(jù)庫不一樣,不存在多表關聯(lián)約束,因此在圍繞教材教參URL構(gòu)建一條記錄時,會存在大量的學歷、學院和課程等冗余信息。資源URL組則記錄了該資源的訪問路徑,考慮到高校多種數(shù)字資源中可能擁有相同信息的資源,因此資源同時具有多個URL使用|(豎線)進行分割。
(2)內(nèi)存對象設計
EXCEL中數(shù)據(jù)會周期加載進內(nèi)存,在緩存池中構(gòu)建出內(nèi)存對象。根據(jù)1.1、1.2節(jié)分析,內(nèi)存對象會采用哈希表結(jié)構(gòu)進行存放,其類圖設計如圖3。
其中ExcelObject為EXCEL被加載進內(nèi)存后的實體對象;學院與課程均采用Map(HashMap)結(jié)構(gòu)存儲,使用編號作為鍵值;資源對象采用Set(HashSet)進行存儲,用于區(qū)分不同的資源對象,而一個資源對象可能存在多個URL鏈接,故采用List列表存儲資源的具體路徑。
2.3? 關鍵實現(xiàn)
(1)加載EXCEL
盡管EXCEL表在邏輯上和ExcelObject內(nèi)存對象對等,但兩者的結(jié)構(gòu)卻存在明顯的不同:EXCEL表中數(shù)據(jù)是按線性順序存放,而ExcelObject則應用到了哈希表,兩者之間需要有數(shù)據(jù)轉(zhuǎn)化。為了實現(xiàn)將EXCEL表中數(shù)據(jù)加載進內(nèi)存,其關鍵代碼如表3。
其中@Cacheable使用的是Spring緩存注解,其具體實現(xiàn)由Ehcache提供,并且其失效時間配置為1小時。一方面通過緩存的方式避免了頻繁加載EXCEL,提高了訪問性能;另一方面訪問內(nèi)存對象時對EXCEL文件無影響,管理員可以對文件進行編輯修改,系統(tǒng)無需重啟即可實現(xiàn)自動加載。
(2)教材教參列表獲取
在獲取教材教參列表數(shù)據(jù)時,瀏覽器通過發(fā)送學歷、學院和課程參數(shù)對ExcelObject進行查詢,從而實現(xiàn)課程資源定位,其關鍵代碼如表4。
上述過程對于查詢學院和課程同樣適用。其中每一次的訪問均需要獲取一次內(nèi)存對象,由于采用了緩存,在未失效的情況下緩存池中的ExcelObject對象會被立即返回,性能遠高于直接訪問磁盤。而通過學歷類型、學院ID和課程ID參數(shù)對ExcelObject對象中的哈希表進行Key/Value查詢,能夠快速定位到教材教參集合,性能也優(yōu)于線性訪問。
2.4? 實例分析
在“新冠疫情”的影響下,為落實“停課不停教、不停學”的指示精神,電子科技大學圖書館聯(lián)合教務處、研究生院、信息中心,在五日時間內(nèi)緊急構(gòu)建2019-2020年第二學期在線課程資源平臺[4]。
該平臺的初步數(shù)據(jù)來源于教務處和研究生院,主要包含了學歷、學院、課程和教材教參信息,以EXCEL的形式提供給圖書館。圖書館通過本校數(shù)字資源平臺,對該數(shù)據(jù)做附加資源URL處理,生成平臺所需的EXCEL并提交給開發(fā)人員。該項目以Maven Web App模板構(gòu)建,EXCEL文件存放于WEB-INF保護目錄中,并通過路徑搜索的方式讀取該文件,加載進內(nèi)存緩存池。Controller以Struts2的Action實現(xiàn),業(yè)務邏輯集中在對緩存池中的內(nèi)存對象進行讀取和查詢。最后項目提交到信息中心做漏洞掃描和安全處理,并最終面向公網(wǎng)發(fā)布。
從上述過程可知,EXCEL能友好地編輯修改,操作簡潔,故成為多部門協(xié)作和數(shù)據(jù)流轉(zhuǎn)的媒介。圖書館在線課程資源平臺直接基于EXCEL而不是數(shù)據(jù)庫,有效地避免了數(shù)據(jù)庫安裝、建庫建表、數(shù)據(jù)導入等操作,極大簡化了系統(tǒng)部署難度。而在開發(fā)上由于是直接讀取EXCEL文件并查詢哈希表,沒有數(shù)據(jù)庫連接配置、DAO/Service層開發(fā)、事務管理等操作,代碼復雜程度降低,更容易維護和升級。
3? 結(jié)束語
綜上所述,采用EXCEL存儲數(shù)據(jù),有效地解決了多部門協(xié)作的問題,數(shù)據(jù)的編輯修改方便快捷。同時數(shù)據(jù)的訪問過程為文件讀取過程,讀取對象為EXCEL的單元格,代碼實現(xiàn)上簡單直觀。最后在項目部署時,僅需將項目工程連同EXCEL文件一同拷貝部署即可,無需額外安裝其他軟件,系統(tǒng)維護也相對容易。整個平臺的數(shù)據(jù)存儲、數(shù)據(jù)訪問、系統(tǒng)部署維護均為輕量級的,這也確保了平臺能夠在短時間內(nèi)構(gòu)建出來并實現(xiàn)上線。
然而上述平臺也存在一定的缺陷,一是加載EXCEL過程有大量的異常處理代碼,解析過程與EXCEL字段先后順序嚴格對應,缺少必要的靈活性;二是當EXCEL數(shù)據(jù)量較大時,加載進內(nèi)存過程中對內(nèi)存容量要求較大;三是緩存失效再次加載EXCEL數(shù)據(jù)時,若數(shù)據(jù)量較大,則有一定的延遲反映。這些問題在后續(xù)的工作中還需進一步深入分析研究。
參考文獻
[1]梁益銘, 謝小燕. 高校圖書館公共衛(wèi)生治理與服務體系研究——以新冠肺炎疫情防控為例[J]. 高校圖書館工作, 2020, 40(3): 29-36.
[2]惠涓澈, 楊妮, 杜桂平. 機遇與創(chuàng)新: 新冠肺炎疫情下的圖書館閱讀推廣[J]. 當代圖書館, 2020(2): 27-30.
[3]李蔚蔚. 新冠肺炎疫情期間公共圖書館的網(wǎng)絡服務研究[J]. 科教文匯(上旬刊), 2020(6): 163-164.
[4]王惠森, 彭莉紅, 周倩. 新冠肺炎疫情下的高校圖書館服務工作——以電子科技大學圖書館為例[J]. 高校圖書館工作, 2020, 40(3): 84-86.
[5]教育部.疫情就是命令——全國教育系統(tǒng)打響疫情防控狙擊戰(zhàn)[EB/OL].[2020-02-26]. http://www.moe.gov.cn/jyb_xwfb/ xw_zt/moe_357/jyzt_2020n/2020_zt03/yw/202002/t20200203_ 417480.html.
[6]馬博韜, 孫鵬, 朱小勇. 紅黑樹算法研究綜述[J]. 網(wǎng)絡新媒體技術, 2018, 7(4): 56-62.
[7]時亞南. B+樹算法的Java實現(xiàn)方法研究[J]. 計算機技術與發(fā)展, 2015, 25(1): 111-114.
[8]葉軍偉. 哈希表沖突處理方法淺析[J]. 科技視界, 2014(06): 230.
[9]林躍, 楊倩, 蓋志靜, 張志坤. Java Web開發(fā)中的SSH框架[J]. 湖北農(nóng)機化, 2020(8): 177.
[10]潘蕊. SSH框架的Web網(wǎng)站設計與實現(xiàn)研究[J]. 成才之路, 2019(36): 58-59.