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