黃承明
摘 要:傳統(tǒng)的數(shù)字化教學資源的存取方案在統(tǒng)一管理、擴展性和存取性能等方面難以滿足目前移動互聯(lián)網(wǎng)高并發(fā)、分布式、多樣化的存取需求。在對數(shù)字化教學資源的內(nèi)容和應用特征、傳統(tǒng)存儲方案的弊端、NoSQL數(shù)據(jù)庫的技術特點深入分析的基礎上,提出了采用MongoDB文檔型數(shù)據(jù)庫實現(xiàn)統(tǒng)一存取的解決方案,并通過Java代碼對關鍵存取技術進行了測試。通過分析和測試結果表明,MongoDB存取方案能夠代替?zhèn)鹘y(tǒng)存取方案,滿足目前移動互聯(lián)網(wǎng)應用環(huán)境的要求。
關鍵詞:數(shù)字化教學資源;NoSQL;MongoDB;存取方案;數(shù)據(jù)庫
中圖分類號:TP31 文獻標志碼:A 文章編號:1673-8454(2018)03-0050-04
引 言
近10年來,教育信息化發(fā)展迅速,已成為各級院校提高核心競爭力的重要手段,[1]信息化建設內(nèi)容也從以基礎設施建設為主轉變?yōu)橐詢?nèi)容建設為主,教學應用形式日趨多樣化,如微課、MOOC、SPOC[2]等,這些信息化教學應用都需要數(shù)字化教學資源來支撐。良好的數(shù)字化教學資源存取基礎架構是信息化教學應用系統(tǒng)性能、健壯性和用戶體驗的根本保障。
一直以來,基于教學資源應用的各類平臺在推廣時普遍遇到的問題是:①訪問效率低,用戶體驗不好;②功能擴展困難;③缺乏資源質(zhì)量保障與評價技術手段,缺乏知識產(chǎn)權保護的技術支撐,使共享資源整體質(zhì)量低下。
其主要原因有:①網(wǎng)絡滿足不了數(shù)字化資源的高帶寬要求,或者后臺數(shù)據(jù)庫存取性能低下;②許多功能受關系型數(shù)據(jù)庫技術約束,改進成本高、風險大。
這些問題的解決除了管理機制和政策因素外都受制于后臺數(shù)字化教學資源的存取技術。良好的后臺數(shù)字化教學資源的存取技術方案,是解決上述問題的根本手段。
數(shù)字化教學資源是指教學活動中所需要的電子化的教學資源,是以數(shù)字形態(tài)存在和服務教育教學的資源,如課程標準、電子教材、電子教案、課件、素材(如圖形/圖像、動畫、音頻、視頻、網(wǎng)頁/網(wǎng)站、動畫、Flash、3D模型、仿真模型)、試題庫、案例庫等。[3]
一、教學資源特征分析
1.內(nèi)容特征
在內(nèi)容上,教學資源最顯著的特征是多樣性。
(1)內(nèi)容形態(tài)具有多樣性。其內(nèi)容形態(tài)有兩大類:一類是基礎形態(tài)的素材資源,如文本、數(shù)據(jù)、圖片、圖形、動畫、音頻、視頻、仿真模型等;一類是復合形態(tài)的應用資源,它是將多種素材加以關聯(lián)組合形成的一種形態(tài),如圖文(DOC、PDF、PPT、CHM等)、網(wǎng)頁、課程等。
(2)應用形式具有多樣性。典型的應用形式有知識庫、網(wǎng)絡(在線)課堂、試題庫、案例庫、模型庫等。
(3)內(nèi)容格式具有多樣性。常見的內(nèi)容格式有文本格式(ANSI、UNICODE)、圖片格式、視頻格式、圖文格式(DOC、PDF、PPT)等。
(4)表現(xiàn)形式具有多樣性。有用來顯示特殊字符的字體,靜態(tài)展示的圖文信息,動態(tài)播放的音視頻動畫,具有交互能力的網(wǎng)頁、仿真模型等等。
此外,數(shù)字化教學資源的內(nèi)容還有一個特征,就是所有數(shù)字化教學資源數(shù)據(jù)在結構上無固定模式,為非結構化數(shù)據(jù)或半結構化數(shù)據(jù)。
2.應用特征
數(shù)字化教學資源應用場景非常廣泛,如精品課程、網(wǎng)絡課堂、題庫系統(tǒng)、考試系統(tǒng)、知識管理、在線教學、企業(yè)培訓等等,在應用上都具有以下幾個共同的特點。
(1)讀多寫少。用戶在使用過程中,絕大多數(shù)時間都是以讀取資源為主,如瀏覽、播放等;通常只是在修改或添加資源時才會有寫入操作。當然訪問日志、評價、交易記錄則屬于輔助數(shù)據(jù),不是屬于資源數(shù)據(jù)。
(2)引用與復制。應用中存在大量的引用和復制操作。通過對多個資源的重組或剪輯,能夠表達新的教學內(nèi)容、產(chǎn)生新的資源。
(3)動態(tài)擴展要求。在應用過程中經(jīng)常會因為用戶需求的變化發(fā)生結構上的擴展。一方面,應用功能的變化將引起結構的擴展,比如,早期的應用系統(tǒng)由于功能不多,僅需要類型、格式、文件名等信息,隨著功能的改進,需要更多的描述信息,如版本信息,有時還會增加新的資源類型,就會引起數(shù)據(jù)庫結構上的變化;另一方面,隨著應用規(guī)模的擴大,需要更多數(shù)據(jù)庫I/O,這就要求數(shù)據(jù)庫在部署模式上進行擴展。
(4)高帶寬要求。視頻播放與資源引用復制功能是基于數(shù)字化教學資源的應用系統(tǒng)最常用的功能,而這些功能都是比較消耗網(wǎng)絡帶寬的功能,通常采用集中式部署的應用系統(tǒng)在廣域網(wǎng)或互聯(lián)網(wǎng)中使用時難以獲得較好的用戶體驗,采用CDN技術或分布式部署將是必然的趨勢。
二、現(xiàn)有的存取方案及其弊端
數(shù)字化形態(tài)的教學資源對象通常包括三大類型的數(shù)據(jù):①資源體數(shù)據(jù),如圖片、視頻等;②元數(shù)據(jù),如格式、標題名稱、版本、版權等;③日志數(shù)據(jù),運行的一些動態(tài)數(shù)據(jù),如存取訪問、應用評價、共享交易等。如圖1所示。
在現(xiàn)有的應用系統(tǒng)中,資源及相關數(shù)據(jù)的存儲方案主要有兩種:
一種是采用關系型數(shù)據(jù)庫與磁盤文件相結合的方式,即元數(shù)據(jù)與日志數(shù)據(jù)存儲在數(shù)據(jù)庫中,體積較小的資源體數(shù)據(jù),如詞條、題干等,保存到數(shù)據(jù)庫的BLOB/Image/Text類型字段中,體積較大的則以磁盤文件的形式保存。這種方案比較成熟,開發(fā)成本也較低,是最常用的方式。但是這種方案有三個缺陷:①功能擴展難度大,代價很高,需要重構表結構和重寫業(yè)務邏輯;②不適合存儲非結構化或半結構化數(shù)據(jù);③資源數(shù)據(jù)分開存儲,存在不一致的隱患。
另一種方案是采用Native XML數(shù)據(jù)庫。通過Native XML可自定義XML Schema的功能,能夠靈活地進行數(shù)據(jù)組織,存儲二進制數(shù)據(jù)和非結構化數(shù)據(jù),通過DOM、SAX、XPath和XQuery等技術,比較方便解析和檢索,能夠?qū)崿F(xiàn)數(shù)據(jù)的統(tǒng)一存儲存取與檢索。[4]這種方案在數(shù)據(jù)結構上擴展非常方便。但是該方案同樣存在分布式擴展困難、低性能的問題。
三、基于MongoDB的統(tǒng)一存取方案
1.NoSQL數(shù)據(jù)庫
NoSQL(英文全稱是Not Only SQL)[5]是指那些非關系型的、分布式的、不保證遵循ACID原則的數(shù)據(jù)存儲系統(tǒng)[6]。NoSQL遵循CAP 理論和BASE原則。[5]
MongoDB是一款支持非結構化/半結構化數(shù)據(jù)、文檔型的NoSQL數(shù)據(jù)庫產(chǎn)品,具有無模式(schema free)、高性能、易管理、分布式、高并發(fā)、海量數(shù)據(jù)、功能豐富、擴展性強等優(yōu)點。
2.MongoDB的存儲原理與特點
MongoDB采用集合方式來組織數(shù)據(jù),是一種“面向集合(Collection-Oriented)”的數(shù)據(jù)庫。[7]MongoDB中的集合(Collection)相當于RDBMS中的表(table),不同的是Collection可以嵌套,而table不可以;集合中的每個數(shù)據(jù)對象稱為“文檔(Document)”,相當于RDBMS中行(row);MongoDB中的所有Collection、Document都有一個24字符長的ObjectId唯一標識。
MongoDB數(shù)據(jù)庫特點很多,綜合起來有以下幾個方面:①采用鍵-值(Key-Value)形式存儲數(shù)據(jù),支持二進制數(shù)據(jù)格式的文檔型數(shù)據(jù)。支持大型對象的存儲且性能優(yōu)良。②無模式,支持動態(tài)查詢、完全索引、文檔內(nèi)嵌查詢。③支持主-從(Master-Slave)服務器間的數(shù)據(jù)復制和故障恢復。支持數(shù)據(jù)分片技術,將數(shù)據(jù)分片存儲到不同的服務器上,可動態(tài)添加、移出存儲服務器。
3.MongoDB數(shù)據(jù)庫的適用性
從MongoDB的上述特點來看,它非常適合數(shù)字化教學資源數(shù)據(jù)的存取和檢索,相比較傳統(tǒng)的存儲方案具有更好的適用性,同時具有更高的性能。
(1)無模式特點能夠方便、靈活地組織和存儲數(shù)字化教學資源這種多形態(tài)的、非結構化/半結構化數(shù)據(jù),且能實現(xiàn)低成本的功能擴展。
(2)支持大型對象存儲,適合視頻、大文件等存取。
(3)主-從服務器以及自動分片則能夠極其方便地進行系統(tǒng)的結構性擴展,同時滿足數(shù)字化教學資源各種應用系統(tǒng)讀多寫少的應用特點。并能實現(xiàn)在廣域網(wǎng)或互聯(lián)網(wǎng)上的分布式部署,大幅降低網(wǎng)絡消耗,提高訪問效率,增強用戶體驗。
四、 關鍵技術的實現(xiàn)
采用MongoDB數(shù)據(jù)庫作為數(shù)字化教學資源的存儲方案需要解決一系列相關的技術問題,包括技術性可行性、兼容性和實際性能等問題,其中技術可行性問題是基礎,是關鍵,下面就應用中的幾個關鍵技術進行說明。
1.文件型數(shù)據(jù)的存儲
MongoDB數(shù)據(jù)庫采用BSON(Binary JSON)形式來存儲,如視頻、圖片等二進制格式數(shù)據(jù),BSON是一種類JSON(JavaScript Object Notation)的二進制形式的存儲格式,最大能存儲16MB大小的數(shù)據(jù),超過16MB的資源數(shù)據(jù)則采用GridFS進行存儲。
GridFS是一種將大型文件存儲在MongoDB中的分布式文件系統(tǒng),這樣解決了文件數(shù)據(jù)和文件元數(shù)據(jù)的統(tǒng)一存儲和管理的問題,兼具文檔型數(shù)據(jù)庫和文件系統(tǒng)的優(yōu)勢。
對于小于16MB的文件的存儲,可以直接存儲在一個“document”中,如圖2所示。
對于大于16MB的文檔數(shù)據(jù),MongoDB則采用GridFS來實現(xiàn)存儲,默認使用fs.chunks和fs.files兩個集合來存儲文件。其中fs.files集合存放文件的信息,fs.chunks存放文件數(shù)據(jù)。一個fs.files集合中的一條記錄內(nèi)容如圖3所示(即一個file的信息內(nèi)容)。
至于file所對應的fs.chunks中的chunk則如圖4所示。
這里文件的length接近31MB字節(jié),大于chunkSize的16MB字節(jié)限制,約為2倍,所以被分成了兩個chunk存放。
2.文件流輸入輸出
在數(shù)字化教學資源相關應用系統(tǒng)中,文件型數(shù)據(jù)的典型應用為文件的上傳、下載、復制和播放,文檔的復制通常由MongoDB的內(nèi)部機制完成,播放功能實際上是一個下載功能,所以,這些功能基本上都歸結為文件的upload和download兩種基本操作,它們常采用文件流來實現(xiàn)輸入輸出。下面是文件的上傳下載功能舉例,圖5是文件上傳的Java代碼。
對于文件的下載或播放,首先,需要通過文件名或ID等信息獲取指定的文件,然后進行文件流輸出即可,圖6是文件查找及下載的Java代碼。
3.擴展能力
MongoDB的擴展能力可以通過主從模式(Master-Slaves)、副本集(Replica Set)、分片模式(Auto Shard)三種部署模式來實現(xiàn)。其中分片模式是將MongoDB數(shù)據(jù)庫中的數(shù)據(jù)分散存儲到多個服務器中,從而達到負載分流的目的,類似于常說的“分表”、“分區(qū)”、“分庫”等概念。數(shù)據(jù)存取時路由服務器根據(jù)片鍵識別對哪個分片實例進行存取,具有優(yōu)良的數(shù)據(jù)擴展和分布式部署能力。[8]
數(shù)字化教學資源數(shù)據(jù)的存儲可以將資源體數(shù)據(jù)、元數(shù)據(jù)、日志數(shù)據(jù)集合存儲到不同的分片中,還可以對集合進一步分片。
五、結語
數(shù)字化教學資源的應用特征與MongoDB數(shù)據(jù)庫的技術特點具有非常高的吻合度,通過對關鍵技術的編碼測試表明,在技術上是可行的,MongoDB這種文檔型數(shù)據(jù)庫十分適合數(shù)字化教學資源統(tǒng)一的存取和管理,能夠?qū)崿F(xiàn)多種形態(tài)的、多層次的、非/半結構化的數(shù)據(jù)的存取與檢索。下一步將在海量數(shù)據(jù)、分布式、高并發(fā)等真實環(huán)境下進行性能測試,為MongoDB數(shù)據(jù)庫在數(shù)字化教學資源應用開發(fā)中提供參考。
參考文獻:
[1]蔣艷紅.江蘇省高校教育信息化發(fā)展策略研究[D].江蘇:江蘇師范大學,2012.
[2]康葉欽.在線教育的“后MOOC時代”——SPOC解析[J].清華大學教育研究,2014(1):85-93.
[3]成秀麗.職業(yè)教育數(shù)字化教學資源研究——基于2005年-2015年文獻統(tǒng)計分析[J].中國電化教育,2016(8):120-123.
[4]閆璐.基于XML的非結構化數(shù)據(jù)管理的研究與應用[D].北京:首都師范大學,2013.
[5]雷宇輝,鐘雯,何清等.Nosql數(shù)據(jù)庫研究文獻綜述[J].電子世界,2017(4):11-13.
[6]趙濟洲.基于MongoDB的代碼查詢平臺[D].江蘇:南京大學,2015.
[7]朱亞興,余愛民,王夷.基于Redis+MySQL+MongoDB存儲架構應用[J].微型機與應用,2014(13):3-5.
[8]王曉琳.MongoDB中的海量數(shù)據(jù)動態(tài)平衡[D].上海交通大學,2014.
(編輯:王天鵬)