摘? 要:教學(xué)資源數(shù)據(jù)幾乎全部都是半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù),傳統(tǒng)應(yīng)用中采用RDBMS和文件系統(tǒng)進(jìn)行存儲(chǔ)存在諸多的弊端。文章分析了教學(xué)資源數(shù)據(jù)組成結(jié)構(gòu)與應(yīng)用特性,以及MongoDB數(shù)據(jù)庫(kù)的存儲(chǔ)機(jī)制,提出了基于MongoDB + GridFS的存儲(chǔ)方案,并結(jié)合實(shí)際案例總結(jié)出了教學(xué)資源數(shù)據(jù)邏輯建模方法和建模要點(diǎn)。
關(guān)鍵詞:半結(jié)構(gòu)化;非結(jié)構(gòu)化;MongoDB;文檔模型;數(shù)據(jù)建模
中圖分類號(hào):TP31? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
Abstract: Almost all of the teaching resource data are semi-structured or unstructured. In traditional applications, there are many disadvantages in using RDBMS and file system for storage. This paper analyzes the data structure and application characteristics of teaching resources and the storage mechanism of MongoDB database, and puts forward a storage scheme based on MongoDB + GridFS. Combined with practical cases, the paper summarizes the logical modeling method and important aspects of teaching resource data.
Keywords: semi-structured; unstructured; MongoDB; document model; data modeling
1? ?引言(Introduction)
教育信息化包含了一系列的目標(biāo)、價(jià)值觀念、技術(shù)規(guī)范以及應(yīng)用手段等內(nèi)容,其核心內(nèi)容是教學(xué)信息化,需要各種各樣的信息化教學(xué)應(yīng)用系統(tǒng)作為支撐,數(shù)字化的教學(xué)資源數(shù)據(jù)是所有這些應(yīng)用系統(tǒng)的基礎(chǔ)。
《教育信息化2.0行動(dòng)計(jì)劃》明確指出了數(shù)字資源建設(shè)的重要性,要科學(xué)、合理、高效地進(jìn)行數(shù)字化教學(xué)資源的建設(shè)、完善、分發(fā)和共享[1]。對(duì)于結(jié)構(gòu)和類型日益復(fù)雜的數(shù)據(jù)庫(kù),傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)暴露出很多問(wèn)題,如磁盤IO瓶頸、模式固定難以橫向擴(kuò)展等,帶來(lái)較高的維護(hù)成本和較低的可用性[2]。NoSQL數(shù)據(jù)庫(kù)的出現(xiàn)為這一困境提供了新的解決問(wèn)題的途徑。
2? 教學(xué)資源數(shù)據(jù)解析(Data analysis of teaching resources)
廣義的教學(xué)資源是指支持教學(xué)活動(dòng)的各種資源,包括人、財(cái)、物、信息等??煞譃槿祟愘Y源(教師、學(xué)生、學(xué)習(xí)小組等)和非人類資源(各種媒體資源,輔助工具及設(shè)施,社會(huì)教育性機(jī)構(gòu),如:試聽(tīng)中心、圖書(shū)館、博物館、少年宮等)。本文中的教學(xué)資源僅指狹義上的教學(xué)資源,即教學(xué)資料、教學(xué)環(huán)境及教學(xué)支撐系統(tǒng)。
數(shù)字化教學(xué)資源是指經(jīng)過(guò)數(shù)字化處理后,以數(shù)字信息的形式存在于計(jì)算機(jī)存儲(chǔ)介質(zhì)中、通過(guò)計(jì)算機(jī)及網(wǎng)絡(luò)進(jìn)行傳播、運(yùn)行的教學(xué)資源,包括:(1)基本形態(tài)資源,即素材資源,如文本、數(shù)據(jù)、圖形圖像、音頻、視頻、動(dòng)畫(huà)等;(2)復(fù)合型態(tài)資源,即應(yīng)用資源,如題庫(kù)、課件、案例庫(kù)、知識(shí)庫(kù)、課程庫(kù)等[3];(3)應(yīng)用系統(tǒng),如圖文系統(tǒng)、教學(xué)應(yīng)用系統(tǒng)、仿真系統(tǒng)等。
教學(xué)資源數(shù)據(jù)是指數(shù)字化教學(xué)資源中的素材資源和應(yīng)用資源在計(jì)算機(jī)中的存儲(chǔ)形態(tài)。這些教學(xué)資源數(shù)據(jù)按照一定組織結(jié)構(gòu)存儲(chǔ)在指定的位置,所形成的教學(xué)資源集合稱為數(shù)字化教學(xué)資源庫(kù)。
要實(shí)現(xiàn)數(shù)字化教學(xué)資源在計(jì)算機(jī)中的存儲(chǔ)、識(shí)別和管理,除了要保存數(shù)字化教學(xué)資源本身數(shù)據(jù)外,還需要大量的輔助性的數(shù)據(jù)來(lái)描述其各項(xiàng)屬性,如名稱、類型、格式、關(guān)系、位置、創(chuàng)建時(shí)間、版本等,其中資源本身數(shù)據(jù)稱為本體數(shù)據(jù),描述資源本體數(shù)據(jù)的數(shù)據(jù)稱為元數(shù)據(jù)。
根據(jù)數(shù)據(jù)的結(jié)構(gòu)化程度,可以將教學(xué)資源數(shù)據(jù)分為兩大類型:
非結(jié)構(gòu)化數(shù)據(jù),幾乎所有的素材資源本體數(shù)據(jù)都是非結(jié)構(gòu)化數(shù)據(jù),如圖片、圖形、動(dòng)畫(huà)、音頻、視頻、仿真模型等,這些數(shù)據(jù)都沒(méi)有固定的結(jié)構(gòu),也就沒(méi)有數(shù)據(jù)之間的關(guān)系存在,通常以二進(jìn)制格式進(jìn)行整體存儲(chǔ)[4]。
半結(jié)構(gòu)化數(shù)據(jù),部分素材資源本體數(shù)據(jù)(如,詞條)、所有的應(yīng)用資源本體數(shù)據(jù)、教學(xué)資源元數(shù)據(jù),這些數(shù)據(jù)沒(méi)有嚴(yán)格的格式,數(shù)據(jù)之間關(guān)系松散,具有下述典型特點(diǎn)[5]:
①自描述性。先有數(shù)據(jù),再有結(jié)構(gòu);
②不精確性。隨時(shí)間和場(chǎng)景變化;
③不規(guī)則性;
④非強(qiáng)制性;
⑤模式復(fù)雜性,也稱模式自由或無(wú)模式。
目前信息化教學(xué)應(yīng)用中的存儲(chǔ)方案為:(1)半結(jié)構(gòu)化數(shù)據(jù)進(jìn)行規(guī)范化,存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)中;(2)非結(jié)構(gòu)化數(shù)據(jù)以文件的形式存儲(chǔ)在計(jì)算機(jī)存儲(chǔ)系統(tǒng)中,通過(guò)路徑名和文件名進(jìn)行訪問(wèn)。
教學(xué)資源數(shù)據(jù)在應(yīng)用上具有以下典型特征:(1)寫(xiě)少讀多,應(yīng)用成分布式;(2)種類復(fù)雜,功能迭代快,擴(kuò)展性要求高;(3)文件數(shù)量極多,小文件比重大。
由于教學(xué)資源數(shù)據(jù)的數(shù)據(jù)特點(diǎn)和應(yīng)用特征,傳統(tǒng)的存儲(chǔ)方案存在較為嚴(yán)重的缺點(diǎn):(1)擴(kuò)展難度大,如增加資源數(shù)據(jù)屬性,資源數(shù)據(jù)屬性的不一致性、嵌套屬性等導(dǎo)致數(shù)據(jù)結(jié)構(gòu)冗余度高;(2)當(dāng)文件的數(shù)量龐大,分類復(fù)雜及多重分類時(shí),文件系統(tǒng)管理難度增大,性能隨文件數(shù)量增大而降低。
針對(duì)傳統(tǒng)存儲(chǔ)方案的不足,建議采用基于NoSQL數(shù)據(jù)庫(kù)的存儲(chǔ)方案:MongoDB + GridFS文檔型數(shù)據(jù)庫(kù)存儲(chǔ)方案。
3? 文檔模型存儲(chǔ)機(jī)制(Storage mechanism of document model)
MongoDB是一個(gè)基于分布式文件存儲(chǔ)的NoSQL文檔模型數(shù)據(jù)庫(kù),因其高效的性能和豐富的使用功能在生產(chǎn)中得到非常廣泛的應(yīng)用。它的體系結(jié)構(gòu)及同關(guān)系型數(shù)據(jù)庫(kù)對(duì)照概念如表1所示。
Document是MongoDB的核心對(duì)象,是數(shù)據(jù)的基本組織單元,類似關(guān)系型數(shù)據(jù)庫(kù)表的行,但是比行要復(fù)雜,它是使用BSON這種結(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù)和進(jìn)行數(shù)據(jù)交換。BSON是一種類JSON的二進(jìn)制形式的存儲(chǔ)格式,簡(jiǎn)稱Binary JSON,它比JSON支持更多的數(shù)據(jù)類型,如二進(jìn)制數(shù)據(jù)[6]。典型的Document對(duì)象如圖1所示。
Field是MongoDB數(shù)據(jù)庫(kù)的基本數(shù)據(jù)單元,采用key: value鍵值對(duì)來(lái)表示數(shù)據(jù),其中key用字符串表示,value則為MongoDB所支持的任何數(shù)據(jù)類型,如:Null、Boolean、String、Symbol、Object Id、Date、Regular Expression、Code、Array、Embedded Document等[6]。
BSON格式的Document對(duì)象是一種無(wú)模式(schema-less)的存儲(chǔ)形式,能夠動(dòng)態(tài)地添加平行或嵌套的數(shù)據(jù)項(xiàng),靈活性很高,具有三個(gè)典型的特點(diǎn):輕量性、可遍歷性、高效性。非常適合存儲(chǔ)教學(xué)資源數(shù)據(jù)中的半結(jié)構(gòu)化數(shù)據(jù)。
在MongoDB中BSON格式的單個(gè)Document對(duì)象(含嵌入的子Document)受到16MB大小的限制。所以,當(dāng)key:value中的value值尺寸過(guò)大時(shí),就要保存到GridFS中。
GridFS是一種將大型文件存儲(chǔ)在MongoDB的文件規(guī)范[7]。GridFS將文件分成多個(gè)塊存儲(chǔ),每塊作為一個(gè)單獨(dú)的文檔,默認(rèn)大小為255kB,最后一個(gè)塊為剩余大小。對(duì)于存儲(chǔ)海量小文件在性能上仍然能夠優(yōu)于文件系統(tǒng)[8]。
一個(gè)文件在GridFS的存儲(chǔ)結(jié)構(gòu)如圖2和圖3所示,使用兩個(gè)集合files和chunks存儲(chǔ),為一對(duì)多關(guān)系。
采用GridFS存儲(chǔ)教學(xué)資源數(shù)據(jù)中的圖片、音頻、視頻等非結(jié)構(gòu)化的數(shù)據(jù)具有幾個(gè)優(yōu)勢(shì):
(1)可以簡(jiǎn)化需求,使用GridFS后就可以不需要另外使用獨(dú)立文件存儲(chǔ)架構(gòu),從而實(shí)現(xiàn)全部教學(xué)資源數(shù)據(jù)的一體化存取。
(2)GridFS能夠直接利用MongoDB已建立的復(fù)制/分片機(jī)制,非常容易實(shí)現(xiàn)分布式的擴(kuò)展、文件分發(fā)和故障恢復(fù)。
(3)無(wú)須關(guān)心放置新文件的位置,沒(méi)有因?yàn)槲募?shù)量增大、目錄加深時(shí)嚴(yán)重影響系統(tǒng)讀寫(xiě)性能的問(wèn)題。
(4)GridFS不產(chǎn)生磁盤碎片。
4? ?建模方法(Modeling method)
在技術(shù)上,MongoDB是一種無(wú)模式(或者自由模型)的文檔型數(shù)據(jù)庫(kù),但是,在實(shí)現(xiàn)應(yīng)用系統(tǒng)的功能時(shí),仍然需要采用規(guī)范約定、技術(shù)手段來(lái)實(shí)現(xiàn)數(shù)據(jù)的業(yè)務(wù)模式,主要是表現(xiàn)數(shù)據(jù)之間的一定的層次和關(guān)系。因此,教學(xué)資源數(shù)據(jù)的建模在數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)階段顯得尤其重要,目的在于提高系統(tǒng)性能、優(yōu)化業(yè)務(wù)功能、方便團(tuán)隊(duì)溝通和提高生產(chǎn)效率。
在RDBMS中,為了使數(shù)據(jù)結(jié)構(gòu)清晰、關(guān)系明確、邏輯嚴(yán)格,需要對(duì)將數(shù)據(jù)對(duì)象拆分成原子數(shù)據(jù)項(xiàng),按照相關(guān)范式進(jìn)行規(guī)范化處理,需要很多的主從結(jié)構(gòu)數(shù)據(jù)表來(lái)存儲(chǔ),建立主外鍵來(lái)描述關(guān)系,查詢時(shí)還需要進(jìn)行連表[9]。
由于MongoDB的文檔模式支持?jǐn)?shù)組和內(nèi)嵌文檔,可以直接用一個(gè)Document來(lái)描述一個(gè)數(shù)據(jù)對(duì)象,而不需要分表/集合存儲(chǔ)。在同一個(gè)集合中,Document的數(shù)據(jù)項(xiàng)并沒(méi)有強(qiáng)制要求完全一樣,完全可以將不同類型的數(shù)據(jù)放在一個(gè)集合中,例如,我們可以將衣服、手機(jī)放在product集合中,盡管衣服和手機(jī)兩類產(chǎn)品具有部分不同的屬性。
此外,在MongoDB數(shù)據(jù)庫(kù)中,每個(gè)Document默認(rèn)包含一個(gè)名為“_id”的Objectld類型屬性,用來(lái)唯一標(biāo)識(shí)一個(gè)文檔對(duì)象,類似于RDBMS中的主鍵,為文檔之間的對(duì)象引用提供了技術(shù)支持。
所以,在基于MongoDB數(shù)據(jù)庫(kù)的教學(xué)資源數(shù)據(jù)的業(yè)務(wù)建模中,可以采用反規(guī)范化處理和規(guī)范化處理是兩種方法來(lái)進(jìn)行建模。
4.1? ?內(nèi)嵌模式的反規(guī)范化處理
內(nèi)嵌模式是指Document中的一個(gè)key:value中的value值也是一個(gè)Document對(duì)象,如圖4所示。
這種結(jié)構(gòu)在RDBMS中是反規(guī)范化的[10],但是這種反規(guī)范化處理的方法能夠直觀地表示一對(duì)一的關(guān)系,如圖4中的home、work子對(duì)象,好處是一次查詢即可獲得完整的對(duì)象,不需要再額外查詢其他集合的文檔對(duì)象。通過(guò)內(nèi)嵌對(duì)象數(shù)組可以實(shí)現(xiàn)一對(duì)多的關(guān)系,多級(jí)的內(nèi)嵌對(duì)象還可以方便地實(shí)現(xiàn)樹(shù)形/層次結(jié)構(gòu),如圖4中g(shù)roups數(shù)組對(duì)象。其缺點(diǎn)是當(dāng)嵌入對(duì)象被重用時(shí),要在每個(gè)文檔中都存儲(chǔ)它的一個(gè)獨(dú)立的副本,這會(huì)減慢插入的速度,還占用額外的磁盤空間。
4.2? ?引用模式的規(guī)范化處理
通過(guò)MongoDB的引用模式可實(shí)現(xiàn)類似RDBMS中的外鍵關(guān)系,以解決重用子對(duì)象的多副本問(wèn)題,主要的目的是減少冗余和優(yōu)化依賴關(guān)系。
以素材資源存儲(chǔ)為例,涉及兩個(gè)數(shù)據(jù)對(duì)象:素材和人員,由于素材資源的本體數(shù)據(jù)(文件)是存儲(chǔ)在GridFS中,不能內(nèi)嵌,必須引用,所以就變成素材屬性、素材文件和人員三者之間的關(guān)系,而人員信息因?yàn)樾枰赜?,最好引用,參考圖5。
在Media Document(素材屬性)中的add_man、file_id就是通過(guò)對(duì)File Document(素材文件)和Person Document(人員)的“_id”進(jìn)行引用,從而形成了典型的一對(duì)一或一對(duì)多的對(duì)應(yīng)關(guān)系。
4.3? ?多對(duì)多關(guān)系的實(shí)現(xiàn)
用過(guò)引用模式實(shí)現(xiàn)了一對(duì)多的對(duì)應(yīng)關(guān)系,則多對(duì)多的關(guān)系也容易實(shí)現(xiàn),最典型的例子是人員與分組之間的對(duì)應(yīng)關(guān)系,參考圖6。
MongoDB中的這種引用模式所形成的一對(duì)多、多對(duì)多關(guān)系同RDBMS一樣,同樣是節(jié)約了空間但犧牲了性能。然而,對(duì)用需要重用的引用對(duì)象來(lái)說(shuō),只有如此才能確保數(shù)據(jù)的一致性。
4.4? ?典型案例
(1)素材資源
素材資源是最基本的教學(xué)資源,也是數(shù)量最多的一種資源,典型的數(shù)據(jù)模型為“資源屬性數(shù)據(jù)(元數(shù)據(jù))資源文件數(shù)據(jù)(本體數(shù)據(jù))”模式,其文檔模型如圖7和圖8所示。
在屬性數(shù)據(jù)中采用了引用模式對(duì)文件數(shù)據(jù)進(jìn)行了關(guān)聯(lián)。
(2)題庫(kù)資源
題庫(kù)資源是典型的應(yīng)用資源,是教學(xué)應(yīng)用中使用頻率最高的資源之一。題庫(kù)資源在RDBMS中的邏輯模型比較復(fù)雜。其關(guān)系模型如圖9所示。
但是,在MongoDB中采用聚合的方式,可以存放到一個(gè)集合之中,其數(shù)據(jù)模型如圖10所示。
需要注意的是,本文檔模型是一個(gè)聚合模型,其中的四個(gè)參考答案(fill_in_answer、choice_answer、brie_answer、true_false_answer)可以根據(jù)exerType的不同取值進(jìn)行選用。同時(shí)可以根據(jù)exerType進(jìn)行分片部署,以提高檢索效率。
5? ?建模要點(diǎn)(Key points of modeling)
教學(xué)資源數(shù)據(jù)建模是構(gòu)建教學(xué)應(yīng)用系統(tǒng)的關(guān)鍵環(huán)節(jié),直接影響到系統(tǒng)的性能和可用性。所以,在進(jìn)行數(shù)據(jù)建模特別要注意以下幾點(diǎn)。
(1)數(shù)據(jù)建模必須以滿足業(yè)務(wù)需求為首要目標(biāo),切不可因追求技術(shù)的完美而脫離業(yè)務(wù)規(guī)則。
(2)在建模過(guò)程中,要靈活使用各種設(shè)計(jì)模式,切不可生搬硬套。
(3)在滿足業(yè)務(wù)需求的前提下,一切以性能優(yōu)先,盡量全面考慮,優(yōu)化讀寫(xiě)性能。
同時(shí),在設(shè)計(jì)過(guò)程中遵循基本的設(shè)計(jì)原則,首先,模型設(shè)計(jì)是為應(yīng)用系統(tǒng)服務(wù),而不是為了存儲(chǔ)空間優(yōu)化;其次,要為實(shí)現(xiàn)系統(tǒng)最佳性能設(shè)計(jì),可以通過(guò)合理的索引、數(shù)據(jù)分片來(lái)提高系統(tǒng)的存取性能。
此外,特別需要注意的是引用和內(nèi)嵌的選用問(wèn)題,需要做到優(yōu)先選用與平衡原則的使用。
(1)在選用內(nèi)嵌模式和引用模式時(shí),優(yōu)先考慮內(nèi)嵌,系統(tǒng)性能優(yōu)先存儲(chǔ)空間。
(2)內(nèi)嵌模式適合一對(duì)一、一對(duì)多的小對(duì)象嵌入,其局限性主要有兩個(gè):16MB體積的限制,大數(shù)組的低性能約束。
(3)引用模式適合一對(duì)多、多對(duì)多中的對(duì)重用對(duì)象的關(guān)聯(lián),多次查詢、寫(xiě)入數(shù)據(jù)時(shí)不能實(shí)現(xiàn)跨集合的事務(wù)性是該模式的主要缺陷[11]。
6? ?結(jié)論(Conclusion)
綜上所述,采用MongoDB+GridFS存儲(chǔ)方案代替RDBMS+文件系統(tǒng)存儲(chǔ)方案在技術(shù)上是可行的,在表達(dá)半結(jié)構(gòu)化及非結(jié)構(gòu)化數(shù)據(jù)的業(yè)務(wù)邏輯上具有天然的優(yōu)勢(shì),在功能上能夠提供更好的一致性、靈活性和擴(kuò)展性,同時(shí)具有較好的系統(tǒng)性能。MomgoDB數(shù)據(jù)庫(kù)與GridFS文件規(guī)范相對(duì)RDBMS和文件系統(tǒng)來(lái)說(shuō)屬于非常年輕的存儲(chǔ)技術(shù),有很大的優(yōu)化空間,而基于MomgoDB+GridFS存儲(chǔ)方案的信息化教學(xué)應(yīng)用系統(tǒng)的實(shí)際性能、魯棒性有待進(jìn)一步的驗(yàn)證。
參考文獻(xiàn)(References)
[1] 吳旻瑜,武曉菲.教育信息化2.0的時(shí)代邏輯——《教育信息化2.0行動(dòng)計(jì)劃》解讀之一[J].遠(yuǎn)程教育雜志,2018(4):4-10.
[2] 宗平,李雷.PostgreSQL與MongoDB處理非結(jié)構(gòu)化數(shù)據(jù)性能比較[J].計(jì)算機(jī)工程與應(yīng)用,2017,53(7):104-108.
[3] 黃承明.基于MongoDB的數(shù)字化教學(xué)資源存取方案研究[J].中國(guó)教育信息化,2018(3):54-57.
[4] 張孝,周寧南.非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)管理研究[J].科研信息化技術(shù)與應(yīng)用,2013,4(1):30-40.
[5] 王靜,孟小峰.半結(jié)構(gòu)化數(shù)據(jù)的模式研究綜述[J].計(jì)算機(jī)科學(xué),2001,28(2):6-10.
[6] 霍多羅夫.MongoDB權(quán)威指南(第2版)[M].北京:人民郵電出版社,2014:7-10.
[7] 邱新忠.基于MongoDB GridFS的地圖瓦片數(shù)據(jù)存儲(chǔ)研究[J].地理空間信息,2016,14(2):50-52.
[8] ITKeyword.MongoDB的GridFS與文件系統(tǒng)在小文件存儲(chǔ)的讀取性能對(duì)[EB/OL].http://www.itkeyword.com/doc/2118899009621598745/mongodb,2015-05-14.
[9] 丁智斌,石浩磊.關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)與規(guī)范化[J].計(jì)算機(jī)與數(shù)字工程,2005(02):114-116.
[10] 黃艾卿.數(shù)據(jù)庫(kù)設(shè)計(jì)中的反規(guī)范化技術(shù)[J].百色學(xué)院學(xué)報(bào),2007,20(6):88-90.
[11] 宣超.基于MongoDB的事務(wù)機(jī)制研究與實(shí)現(xiàn)[D].四川:電子科技大學(xué),2018.