潘益婷,潘修強(qiáng),肖鵬飛
(1.浙江工貿(mào)職業(yè)技術(shù)學(xué)院 信息與傳媒分院,浙江 溫州325000;2.溫州職業(yè)技術(shù)學(xué)院 瑞安學(xué)院,浙江 溫州 325000)
NoSQL數(shù)據(jù)庫(kù)的產(chǎn)生就是為了解決大數(shù)據(jù)應(yīng)用難題,對(duì)于如何充分利用其無(wú)模式、支持內(nèi)嵌文檔、全類(lèi)型索引、簡(jiǎn)單易用等特點(diǎn)應(yīng)用于包括科研信息管理系統(tǒng)等各領(lǐng)域,提高系統(tǒng)運(yùn)行效率,國(guó)內(nèi)近幾年也有一些相關(guān)研究工作。張煜[1]等人提出NoSQL數(shù)據(jù)庫(kù)是另一種存儲(chǔ)解決方案,探討了其在監(jiān)測(cè)系統(tǒng)中的應(yīng)用。周躍[2]等人提出兩個(gè)優(yōu)化批處理算法解決服務(wù)端批量處理的低效問(wèn)題,原型系統(tǒng)基于典型的分布式NoSQL系統(tǒng)HBase實(shí)現(xiàn)。鄂世嘉[3]等人提出自動(dòng)通過(guò)圖數(shù)據(jù)庫(kù)Cayley以及MongoDB數(shù)據(jù)庫(kù)系統(tǒng),對(duì)三元組文件數(shù)據(jù)進(jìn)行導(dǎo)入轉(zhuǎn)換為龐大的知識(shí)圖譜系統(tǒng)。王凱[4]等基于文檔型、非關(guān)系型數(shù)據(jù)庫(kù)MongoDB提出了一套基于四叉樹(shù)的道路網(wǎng)時(shí)空索引,實(shí)現(xiàn)海量軌跡數(shù)據(jù)的高效查詢(xún)。肖子達(dá)[5]等人以MongoDB數(shù)據(jù)庫(kù)為研究實(shí)例,提出了一種基于片鍵和索引的數(shù)據(jù)庫(kù)性能提升方法。但是以上研究關(guān)于NoSQL應(yīng)用于科研信息管理系統(tǒng)方面的闡述較少,缺乏有實(shí)際應(yīng)用、針對(duì)性強(qiáng)的NoSQL解決方案。因此,為方便對(duì)科研項(xiàng)目、論文、學(xué)生等管理,建立一個(gè)基于NoSQL的、高效的科研信息管理系統(tǒng)是必要的。
當(dāng)前高校在校學(xué)生人數(shù)不斷增多,科研信息數(shù)據(jù)也隨之不斷擴(kuò)增,本系統(tǒng)針對(duì)科研信息進(jìn)行網(wǎng)絡(luò)化、信息化管理,方便導(dǎo)師、本科生、研究生、博士生進(jìn)行數(shù)據(jù)信息的共享,方便管理員對(duì)整個(gè)科研信息進(jìn)行管理,提高實(shí)驗(yàn)室科研管理水平。本系統(tǒng)分別使用MongoDB數(shù)據(jù)庫(kù)和MySQL數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)數(shù)據(jù),探究NoSQL技術(shù)在實(shí)際中的應(yīng)用方案,比較非關(guān)系型數(shù)據(jù)庫(kù)和關(guān)系型數(shù)據(jù)庫(kù)處理大量文檔型數(shù)據(jù)的不同性能。本系統(tǒng)分為用戶(hù)管理、科研項(xiàng)目管理、科研成果管理、消息管理四個(gè)功能模塊。系統(tǒng)功能結(jié)構(gòu)圖如圖1所示。①用戶(hù)管理。可以根據(jù)不同的權(quán)限增加、刪除人員,查詢(xún)相關(guān)人員信息,修改人員信息,用戶(hù)分不同的角色,有管理員角色、教師角色、學(xué)生角色,不同角色登錄系統(tǒng)擁有不同的功能。②科研項(xiàng)目管理。項(xiàng)目分為立項(xiàng)項(xiàng)目、開(kāi)題項(xiàng)目、在研項(xiàng)目、結(jié)題項(xiàng)目四種類(lèi)別,項(xiàng)目狀態(tài)的改變只能依次遞增,每個(gè)項(xiàng)目的負(fù)責(zé)人只有一位,可以有多位參與者,不論教師還是學(xué)生,項(xiàng)目不同的階段還應(yīng)該有相應(yīng)的文檔說(shuō)明。③科研成果管理。包括專(zhuān)利管理、獲獎(jiǎng)管理和軟件著作權(quán)管理,添加與項(xiàng)目匹配的科技成果,也可刪除相關(guān)成果和查詢(xún)科研成果。論文分為中文論文和英文論文兩種,每篇論文有一名第一作者,每篇論文可以有多名參與編寫(xiě)的教師或?qū)W生,論文需要有相應(yīng)的證明文檔,可上傳或下載。④消息管理。管理員和教師發(fā)布最新通知,也可查看實(shí)驗(yàn)室最新的在研項(xiàng)目。
圖1 系統(tǒng)功能結(jié)構(gòu)圖
系統(tǒng)總體架構(gòu)如圖2所示。本系統(tǒng)采用MVC[6]設(shè)計(jì)模式,把系統(tǒng)拆分成 Model(模型)、View(視圖)、Control(控制器)三部分,這三部分各司其職又相互協(xié)調(diào)配合完成系統(tǒng)功能,提高系統(tǒng)的可擴(kuò)展性和可維護(hù)性,最大化地實(shí)現(xiàn)低耦合、高復(fù)用。系統(tǒng)利用SSH框架[7]:Struts2、Spring、Hibernate,以及使用 MongoDB 數(shù)據(jù)庫(kù)[8]和MySQL數(shù)據(jù)庫(kù)[9]來(lái)實(shí)現(xiàn)對(duì)科研信息數(shù)據(jù)的存儲(chǔ)和管理。
總體架構(gòu)設(shè)計(jì)分3部分:①表示層。利用Struts2框架實(shí)現(xiàn),Struts2應(yīng)用程序是基于HTTP協(xié)議和MVC設(shè)計(jì)模式,通過(guò)JSP頁(yè)面進(jìn)行交互,根據(jù)Struts中的配置文件將請(qǐng)求委派給相應(yīng)的Action處理,并將結(jié)果返回。②業(yè)務(wù)邏輯層。由Spring框架實(shí)現(xiàn)具體業(yè)務(wù)邏輯處理,Spring是一個(gè)輕量級(jí)的IOC和AOP容器框架,讓對(duì)象與對(duì)象之間、模塊與模塊之間的關(guān)系通過(guò)配置說(shuō)明來(lái)管理,而不用通過(guò)代碼來(lái)關(guān)聯(lián),并且Spring框架能很好地與其他框架集成,使Struts與Hibernate更好地工作。③數(shù)據(jù)訪問(wèn)層。由Hibernate框架實(shí)現(xiàn),處理與數(shù)據(jù)庫(kù)的交互操作,將關(guān)系數(shù)據(jù)庫(kù)中的表映射成為對(duì)象,把對(duì)數(shù)據(jù)庫(kù)的操作轉(zhuǎn)化為對(duì)象的操作,不用寫(xiě)SQL語(yǔ)句操作數(shù)據(jù)表,而是用面向?qū)ο笏季S,用HQL直接從數(shù)據(jù)庫(kù)獲得Java對(duì)象。
圖2 系統(tǒng)總體架構(gòu)圖
本系統(tǒng)分別使用MySQL數(shù)據(jù)庫(kù)和MongoDB數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)數(shù)據(jù),探究NoSQL技術(shù)在實(shí)際中的應(yīng)用方案,比較關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)處理大量文檔型數(shù)據(jù)的不同性能。
數(shù)據(jù)庫(kù)設(shè)計(jì)主要包括需求分析、概念設(shè)計(jì)、邏輯設(shè)計(jì)和物理設(shè)計(jì)幾個(gè)方面,它是根據(jù)系統(tǒng)功能和性能需求分析的結(jié)果,對(duì)系統(tǒng)的具體數(shù)據(jù)庫(kù)結(jié)構(gòu)進(jìn)行設(shè)計(jì)與創(chuàng)建管理,使其符合預(yù)期的業(yè)務(wù)需求。
概念設(shè)計(jì)是按照用戶(hù)的需求進(jìn)行現(xiàn)實(shí)世界的信息抽象建模,一般選用E-R模型分析方法,確定有哪些實(shí)體,以及實(shí)體之間的關(guān)系(一對(duì)一、一對(duì)多、多對(duì)多),項(xiàng)目管理E-R圖如圖3所示。
圖3 項(xiàng)目管理E-R圖
其中項(xiàng)目擁有名字、級(jí)別、類(lèi)別、經(jīng)費(fèi)等屬性,教師負(fù)責(zé)項(xiàng)目,是一對(duì)多的關(guān)系;研究生參與項(xiàng)目,是多對(duì)多的關(guān)系;管理員管理項(xiàng)目,是一對(duì)多的關(guān)系。
邏輯結(jié)構(gòu)設(shè)計(jì)是將E-R模型轉(zhuǎn)為關(guān)系模型,在ER模型的基礎(chǔ)上建立數(shù)據(jù)表,其中多對(duì)多關(guān)系的處理方式是:增加一個(gè)實(shí)體,拆成2個(gè)一對(duì)多關(guān)系。MySQL數(shù)據(jù)庫(kù)建立表,首先根據(jù)業(yè)務(wù)需求選用合適的存儲(chǔ)引擎,本系統(tǒng)采用INNODB引擎,以及各字段類(lèi)型、名稱(chēng)、完整性約束等,建立表與表之間的聯(lián)系。文檔表結(jié)構(gòu)如圖4所示。
圖4 MySQL中的文檔表結(jié)構(gòu)
非關(guān)系型數(shù)據(jù)庫(kù),又稱(chēng)NoSQL,是大量數(shù)據(jù)存儲(chǔ)的集合,根據(jù)結(jié)構(gòu)化方法和應(yīng)用場(chǎng)合,主要分為以下三類(lèi):①列式存儲(chǔ)(Column-Oriented),其存儲(chǔ)結(jié)構(gòu)為列式結(jié)構(gòu)(關(guān)系型數(shù)據(jù)庫(kù)為行式結(jié)構(gòu)),應(yīng)用于分布式存儲(chǔ)的海量數(shù)據(jù),例如 HBase、Cassandra;②鍵值存儲(chǔ)(Key-Value),每個(gè)Key對(duì)應(yīng)一個(gè)Value,結(jié)構(gòu)類(lèi)似于Hash表,應(yīng)用于緩存系統(tǒng),例如Redis;③文檔存儲(chǔ)(Document-Oriented),結(jié)構(gòu)與Key-Value相似,也是每個(gè)Key對(duì)于一個(gè)Value,但Value主要是JSON或XML等格式,應(yīng)用于海量數(shù)據(jù)快速查詢(xún),例如MongoDB。
MongoDB是一個(gè)面向文檔存儲(chǔ)的非關(guān)系型數(shù)據(jù)庫(kù),用來(lái)處理大規(guī)模的文本數(shù)據(jù),支持多種字段的定義,數(shù)據(jù)也可以進(jìn)行索引。MongoDB不存在關(guān)系型數(shù)據(jù)庫(kù)中表和列的概念,而是使用集合,集合中存儲(chǔ)的是一個(gè)個(gè)鍵值對(duì),鍵值對(duì)的內(nèi)容以及格式根據(jù)實(shí)際需求確定,不受數(shù)據(jù)模式限制,例如項(xiàng)目信息數(shù)據(jù)集合結(jié)構(gòu)表如圖5所示。
圖5 MongoDB中的項(xiàng)目信息表
本系統(tǒng)的所有功能都利用SSH框架(Struts2、Spring、Hibernate)來(lái)實(shí)現(xiàn),這種MVC架構(gòu)實(shí)現(xiàn)了視圖、控制器和模型的分離,以及業(yè)務(wù)邏輯層與持久層的分離,不僅降低了各層之間的耦合度,還大大提高了系統(tǒng)的可復(fù)用性。并且分別使用MySQL數(shù)據(jù)庫(kù)和MongoDB數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)數(shù)據(jù),比較關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)處理大量文檔型數(shù)據(jù)的不同性能。
本系統(tǒng)角色有三類(lèi):教師、學(xué)生、管理員,不同角色擁有不同操作功能,有前臺(tái)功能和后臺(tái)管理功能,前臺(tái)功能主要供教師和學(xué)生使用,有登錄功能、個(gè)人信息功能、項(xiàng)目信息管理功能、項(xiàng)目成果管理功能、消息管理功能等,后臺(tái)供管理員使用,主要對(duì)用戶(hù)、項(xiàng)目、成果、消息等進(jìn)行增刪改查操作。
項(xiàng)目管理分為立項(xiàng)管理、在研管理、變更管理和結(jié)題管理四種(圖6)。當(dāng)管理員或教師登錄系統(tǒng)后,可以對(duì)項(xiàng)目信息進(jìn)行管理,包括對(duì)項(xiàng)目信息的查詢(xún)、增加、修改和刪除。管理員可以管理所有項(xiàng)目的增刪改查操作,教師只能對(duì)自己負(fù)責(zé)的項(xiàng)目進(jìn)行修改與刪除操作。學(xué)生登錄后只能進(jìn)行查詢(xún)操作(查看立項(xiàng)、在研、結(jié)題的項(xiàng)目),不具備修改和刪除的操作權(quán)限。
圖6 項(xiàng)目管理界面
成果管理分別支持對(duì)論文、著作、知識(shí)產(chǎn)權(quán)、獎(jiǎng)勵(lì)成果四類(lèi)成果的查詢(xún)、增加、修改和刪除功能。其中論文成果管理還支持論文的上傳和下載功能,知識(shí)產(chǎn)權(quán)包括專(zhuān)利成果和版權(quán)成果,添加專(zhuān)利成果時(shí),首先獲取所有的結(jié)題項(xiàng)目列表,再輸入專(zhuān)利各項(xiàng)信息。學(xué)生可以新增論文,修改和刪除自己的論文、著作、知識(shí)產(chǎn)權(quán)、獎(jiǎng)勵(lì)成果等。管理員則可以所有的論文、著作、知識(shí)產(chǎn)權(quán)和獎(jiǎng)勵(lì)成果。
消息管理包括每周總結(jié)報(bào)告、日常講座、通知通告等,學(xué)生可以查看日常講座信息、通告信息等,教師可以發(fā)布、修改、刪除這些信息。
查詢(xún)指定集合下的所有文檔信息部分核心代碼如下:
系統(tǒng)的運(yùn)行環(huán)境如下:
硬件環(huán)境:Windows 10操作系統(tǒng)、4G內(nèi)存、1TB硬盤(pán)、i7處理器。
軟件環(huán)境:IntelliJ IDEA、MongoDB、MySQL。
經(jīng)測(cè)試,系統(tǒng)的各功能和性能均達(dá)到了預(yù)期要求。系統(tǒng)的功能測(cè)試和性能測(cè)試結(jié)果如下:
本系統(tǒng)基本符合科研信息管理系統(tǒng)的功能需求,系統(tǒng)的頁(yè)面功能、操作流程、權(quán)限控制、異常處理都基本規(guī)范,人機(jī)交互界面設(shè)計(jì)較良好,功能基本齊全。
在系統(tǒng)的性能方面,本系統(tǒng)分別使用關(guān)系型數(shù)據(jù)庫(kù)MySQL和非關(guān)系型數(shù)據(jù)庫(kù)MongoDB以論文表為例進(jìn)行測(cè)試和比較。MongoDB對(duì)數(shù)據(jù)結(jié)構(gòu)要求比較松散,存儲(chǔ)的文檔是一組鍵值對(duì),文檔中還可以?xún)?nèi)嵌文檔,在數(shù)據(jù)的插入和查詢(xún)性上均都高于MySQL數(shù)據(jù)庫(kù)。例如對(duì)于1億條記錄的論文表,MongoDB的查詢(xún)速度是MySQL數(shù)據(jù)庫(kù)的3倍左右。
本文應(yīng)用多種技術(shù)開(kāi)發(fā)了一個(gè)基于NoSQL和MySQL的科研信息管理系統(tǒng)。主要技術(shù)有:MVC設(shè)計(jì)模式、Struts2框架、Spring框架、Hibernate框架、MongoDB 數(shù)據(jù)庫(kù)和MySQL數(shù)據(jù)庫(kù)等。實(shí)現(xiàn)了包含用戶(hù)管理、項(xiàng)目管理、成果管理,以及消息管理為一體的科研信息管理系統(tǒng)。通過(guò)測(cè)試比較非關(guān)系型數(shù)據(jù)庫(kù)和關(guān)系型數(shù)據(jù)庫(kù)處理大量文檔型數(shù)據(jù)的不同性能,切實(shí)解決了科研信息管理系統(tǒng)的查詢(xún)性能以及數(shù)據(jù)擴(kuò)展問(wèn)題。