竇 亮,徐 飛,谷林濤
(華東師范大學(xué) 計算機科學(xué)技術(shù)系,上海 200062)
隨著Web2.0網(wǎng)站的興起,各領(lǐng)域數(shù)據(jù)量呈現(xiàn)爆發(fā)式增長,大數(shù)據(jù)時代業(yè)已來臨。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在存儲和處理高并發(fā)和多樣的海量數(shù)據(jù)時,或是成本代價過高,或是難以給出令人滿意的解決方案,NoSQL(Not only SQL)技術(shù)為解決這些問題提供了新的方案。NoSQL數(shù)據(jù)庫具有多種類型,特點各不相同,更加適合大數(shù)據(jù)的存儲和管理,應(yīng)用于不同的Web2.0場景獲得了巨大的成功。根據(jù)業(yè)內(nèi)權(quán)威的DB Engines排行榜[1]數(shù)據(jù)顯示,雖然目前排名前三的數(shù)據(jù)庫仍是關(guān)系型數(shù)據(jù)庫(Oracle、MySQL和SQL Server),但典型的NoSQL數(shù)據(jù)庫MongoDB、Cassandra、Redis等已進(jìn)入前十位的排名,且市場占有率的增長非常穩(wěn)定。
在現(xiàn)今大數(shù)據(jù)的背景之下,關(guān)系型數(shù)據(jù)庫已不再是唯一的選擇,但NoSQL數(shù)據(jù)庫也不會直接取代關(guān)系型數(shù)據(jù)庫,數(shù)據(jù)庫領(lǐng)域正進(jìn)入“混合持久化”(polyglot persistence)的時代[2],應(yīng)用程序可以使用多種技術(shù)來管理數(shù)據(jù)。
作為數(shù)據(jù)庫原理課程的延伸,數(shù)據(jù)庫系統(tǒng)實踐課程開設(shè)的目的是培養(yǎng)學(xué)生的數(shù)據(jù)庫設(shè)計、數(shù)據(jù)庫系統(tǒng)的管理和應(yīng)用開發(fā)能力,使學(xué)生能夠靈活地運用數(shù)據(jù)庫技術(shù)解決實際的應(yīng)用問題。原有的課程內(nèi)容包括:以主流的關(guān)系型數(shù)據(jù)庫Microsoft SQL Server作為實驗環(huán)境,要求學(xué)生掌握SQL Server數(shù)據(jù)庫的基本操作;教師給出典型的數(shù)據(jù)庫設(shè)計案例和應(yīng)用系統(tǒng)開發(fā)實例,通過分析講解,讓學(xué)生掌握數(shù)據(jù)庫建模和設(shè)計的基本方法,要求學(xué)生自選題目完成一個完整的數(shù)據(jù)庫應(yīng)用系統(tǒng)的設(shè)計與實現(xiàn)。
在較長的時期中,課程教學(xué)內(nèi)容以關(guān)系型數(shù)據(jù)庫的應(yīng)用實踐為主,在目前大數(shù)據(jù)背景下,需要引入NoSQL數(shù)據(jù)庫的教學(xué)內(nèi)容,更好地適應(yīng)時代的需求,但引入這部分教學(xué)內(nèi)容并非輕而易舉,主要面臨以下問題。
(1)大數(shù)據(jù)處理和NoSQL技術(shù)涉及的內(nèi)容繁多,市場上NoSQL數(shù)據(jù)庫產(chǎn)品也十分繁雜,不同產(chǎn)品適合不同的應(yīng)用場景,在學(xué)習(xí)的初始階段需要進(jìn)行大量的摸索和實踐,然而目前這方面系統(tǒng)的參考資料卻非常少,適合本科生學(xué)習(xí)和實踐的教材更加稀少。
(2)引入NoSQL技術(shù)教學(xué)內(nèi)容之后,課程涉及的內(nèi)容顯得更加多層次,對于專業(yè)水平尚在提升階段的本科生而言,同時理解關(guān)系型和非關(guān)系型這兩種完全不同的數(shù)據(jù)庫技術(shù)會是一個難點。
可見,教師需要精心選取合適的教學(xué)案例,科學(xué)地設(shè)計課程實施方法,才能更好地激發(fā)學(xué)生對新技術(shù)、新趨勢的熱情,滿足不同層次學(xué)生的需求,擁抱大數(shù)據(jù)時代。
數(shù)據(jù)庫技術(shù)涉及的內(nèi)容是多層次的,可從數(shù)據(jù)庫應(yīng)用、數(shù)據(jù)庫系統(tǒng)理論和數(shù)據(jù)庫新技術(shù)等多個角度來看[3],引入的NoSQL數(shù)據(jù)庫內(nèi)容屬于數(shù)據(jù)庫新技術(shù)部分。引入新內(nèi)容后,本課程涉及的內(nèi)容更加豐富,但總體課時數(shù)有限,因此,針對本科生的教學(xué)需求調(diào)整教學(xué)內(nèi)容成為首要問題。華東師范大學(xué)計算機科學(xué)技術(shù)系此門課程為2個學(xué)分,18個課時上課,36個課時上機實驗。經(jīng)過討論,課程組大大簡化了原來和特定DBMS比較相關(guān)的數(shù)據(jù)庫備份與恢復(fù)、安全控制的內(nèi)容,只對這部分內(nèi)容做基本介紹,而增加了對NoSQL數(shù)據(jù)庫應(yīng)用技術(shù)的介紹。
調(diào)整后課程知識模塊分成4部分。第1部分主題是SQL Server數(shù)據(jù)庫管理系統(tǒng),通過大量驗證型的上機練習(xí),使學(xué)生對關(guān)系型數(shù)據(jù)庫理論有更加實際和深入的理解。第2部分主題是關(guān)系型數(shù)據(jù)庫的設(shè)計,介紹4個典型的數(shù)據(jù)庫設(shè)計案例,對數(shù)據(jù)庫設(shè)計方法學(xué)進(jìn)行解說,分析常見問題和錯誤,使學(xué)生能夠具備設(shè)計出符合實際業(yè)務(wù)需求的數(shù)據(jù)庫的核心素養(yǎng)。第3部分主題是數(shù)據(jù)庫應(yīng)用開發(fā),介紹數(shù)據(jù)庫應(yīng)用系統(tǒng)的體系結(jié)構(gòu)和常見數(shù)據(jù)庫訪問技術(shù),完整地演示一個數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)的小型案例,要求學(xué)生根據(jù)自己的情況,至少掌握一種數(shù)據(jù)庫訪問技術(shù)。第4部分主題是NoSQL數(shù)據(jù)庫,這部分對NoSQL技術(shù)的介紹不求面面俱到,也不對各種NoSQL技術(shù)的理論做深入剖析,只做基本的介紹,選取文檔型數(shù)據(jù)庫MongoDB作為代表進(jìn)行介紹,通過分析兩個案例,讓學(xué)生了解NoSQL數(shù)據(jù)庫的應(yīng)用場景和解決方案。調(diào)整后的知識模塊和課時分配見表1。
表1 課程知識模塊和課時分配
數(shù)據(jù)庫技術(shù)課程是實踐課,要求學(xué)生動手實踐并在實踐中學(xué)習(xí)與培養(yǎng)能力,但學(xué)生大多只掌握兩門左右的編程語言,欠缺完整的實際性的軟件項目的開發(fā)經(jīng)驗,因此,項目采用案例式教學(xué)的方法,使用典型案例供學(xué)生學(xué)習(xí)思考以及分析。事實證明案例式教學(xué)法在實踐類課程中是行之有效的,可以讓學(xué)生真正體會數(shù)據(jù)庫的內(nèi)涵與實質(zhì)[4]。
在關(guān)系型數(shù)據(jù)庫設(shè)計部分,講解分析4個典型的數(shù)據(jù)庫設(shè)計案例,分別是圖書館信息管理數(shù)據(jù)庫、教學(xué)信息管理數(shù)據(jù)庫、航班信息管理數(shù)據(jù)庫和網(wǎng)上書店系統(tǒng)數(shù)據(jù)庫,這些案例的需求和背景都是學(xué)生在日常生活中可以接觸和深入了解到的,規(guī)模適中,適合本科生進(jìn)行數(shù)據(jù)庫設(shè)計的學(xué)習(xí)。在講解分析數(shù)據(jù)庫設(shè)計的過程中,對數(shù)據(jù)庫設(shè)計中的常見問題和錯誤進(jìn)行總結(jié)分析,包括確定系統(tǒng)邊界的重要性;設(shè)計過程中選擇實體還是屬性,選擇實體還是聯(lián)系,選擇二元聯(lián)系還是多元聯(lián)系[5];如何區(qū)分?jǐn)?shù)據(jù)需求和系統(tǒng)業(yè)務(wù)需求,兩者如何互相影響;優(yōu)化關(guān)系數(shù)據(jù)模型的方法等。這些常見問題都是在歷年學(xué)生的數(shù)據(jù)庫設(shè)計作品中反映出來的,通過對這些問題的總結(jié)分析,讓學(xué)生認(rèn)識到理論與實踐的距離,對數(shù)據(jù)庫設(shè)計的準(zhǔn)確性和合理性有更深入的認(rèn)識。
在關(guān)系型數(shù)據(jù)庫應(yīng)用開發(fā)部分,演示一個完整的、基于ASP.Net技術(shù)和SQL Server數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)案例——新聞管理發(fā)布系統(tǒng)。該案例系統(tǒng)涵蓋了各種典型功能,普通用戶可以查閱新聞和搜索新聞,用戶查閱新聞會增加點擊率;管理員可以登錄后臺管理系統(tǒng),對新聞的類別、標(biāo)題、內(nèi)容、發(fā)布者等信息進(jìn)行增加、刪除和修改操作。此案例開發(fā)使用Visual Studio工具,由于該工具提供了諸多ASP.NET控件,且測試環(huán)境簡單易用,通過案例演示,學(xué)生可以在很短的時間內(nèi)快速上手,對基于關(guān)系型數(shù)據(jù)庫的應(yīng)用系統(tǒng)開發(fā)基本過程有一個直觀的認(rèn)識。隨著技術(shù)的飛速發(fā)展,數(shù)據(jù)庫應(yīng)用開發(fā)技術(shù)日新月異,軟件開發(fā)體系結(jié)構(gòu)不斷演變,此部分要求學(xué)生通過課內(nèi)或課外的學(xué)習(xí),至少掌握一種數(shù)據(jù)庫訪問技術(shù),具備數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)的基本能力,對MVC設(shè)計模式和應(yīng)用系統(tǒng)架構(gòu)中的分層思想有基本認(rèn)識。
在NoSQL數(shù)據(jù)庫應(yīng)用開發(fā)部分,以MongoDB為例進(jìn)行介紹,MongoDB是一個可擴展的高性能、開源、模式自由、面向文檔的數(shù)據(jù)庫[6],是NoSQL數(shù)據(jù)庫的典型代表,具有網(wǎng)站實時數(shù)據(jù)存儲所需的高度伸縮性。課程主要介紹MongoDB的特點和適用場景,重點介紹從數(shù)據(jù)庫設(shè)計的角度,如何能夠滿足應(yīng)用程序的需求,表現(xiàn)為一對一、一對多、多對多模式。兩個基于MongoDB的應(yīng)用開發(fā)案例,各有側(cè)重點。第一個案例結(jié)合使用Node.js技術(shù)[7]和MongoDB數(shù)據(jù)庫實現(xiàn)用戶登錄驗證模塊,功能簡單,學(xué)生可以較容易地跟隨案例步驟,完成整個開發(fā)環(huán)境的搭建,學(xué)會使用Node.js連接MongoDB數(shù)據(jù)庫的方法。由于Node.js能夠處理龐大并且高吞吐量的并發(fā)連接,和存儲速度快的MongoDB數(shù)據(jù)庫結(jié)合使用,可以處理實時交互的數(shù)據(jù)密集型應(yīng)用,會是未來解決大規(guī)模I/O問題的技術(shù)選型趨勢,對于學(xué)生了解這類應(yīng)用系統(tǒng)的開發(fā)方法很有益處。另一個案例是一個經(jīng)過裁剪的有實際應(yīng)用背景的MongoDB應(yīng)用案例,為一個網(wǎng)絡(luò)負(fù)載量分析系統(tǒng)。該案例系統(tǒng)以圖形化的方式直觀地呈現(xiàn)分析結(jié)果,可以對網(wǎng)絡(luò)的流量、速率、并發(fā)量和包速率等信息進(jìn)行曲線圖的單獨顯示,有效地為企業(yè)和單位提供網(wǎng)絡(luò)性能分析結(jié)果。該系統(tǒng)在前端可視化部分采用了Amcharts圖表,以曲線圖的方式展現(xiàn)網(wǎng)絡(luò)負(fù)載的各個指標(biāo),實現(xiàn)數(shù)據(jù)的動態(tài)展現(xiàn)。通過此案例的學(xué)習(xí),可以幫助學(xué)生理解在大數(shù)據(jù)時代,除了需要快速有效地存取大規(guī)模量的數(shù)據(jù),提高大數(shù)據(jù)的可視化水平也是一個非常重要的工作。
在教學(xué)過程中,除了大量使用案例式教學(xué)法,還可采用對比式教學(xué)法和項目驅(qū)動教學(xué)法。
1)對比式教學(xué)法的應(yīng)用。
對比式教學(xué)法將具有一定聯(lián)系和區(qū)別的教學(xué)內(nèi)容放在一起,進(jìn)行對比和分析,使學(xué)生更能深刻理解教學(xué)內(nèi)容[8]。大數(shù)據(jù)處理和NoSQL技術(shù)涉及的內(nèi)容繁多,不同公司有不同的NoSQL數(shù)據(jù)庫產(chǎn)品,而且某一產(chǎn)品往往是為特定的應(yīng)用而設(shè)計的,并不一定能夠適用于所有的場景。在教學(xué)過程中,可將不同的NoSQL數(shù)據(jù)庫的開發(fā)語言、特性和應(yīng)用場景進(jìn)行對比說明,幫助學(xué)生掌握這一知識點。同時,NoSQL數(shù)據(jù)庫的“非關(guān)系型”特性,與傳統(tǒng)的“關(guān)系型”數(shù)據(jù)庫形成了鮮明的特點,在掌握這兩種具有一定對立特性的數(shù)據(jù)庫的時候,需要深刻理解背后的原因和發(fā)展背景,也需要教師進(jìn)行對比解說。
2)項目驅(qū)動的教學(xué)法的應(yīng)用。
課程要求學(xué)生開發(fā)完成一個數(shù)據(jù)庫課程設(shè)計作品,由1~2人成立小組完成,可以選擇關(guān)系型數(shù)據(jù)庫或NoSQL數(shù)據(jù)庫,也可以混合使用這兩類數(shù)據(jù)庫,開發(fā)語言和平臺不作限定。教師在項目選題初期給予一定的指導(dǎo),幫助學(xué)生確定系統(tǒng)邊界和技術(shù)選型,具體的需求分析、數(shù)據(jù)庫設(shè)計、系統(tǒng)設(shè)計和開發(fā)以及測試和實施都由學(xué)生自行完成。項目驅(qū)動的教學(xué)法可充分調(diào)動學(xué)生學(xué)習(xí)興趣,提高學(xué)生自覺學(xué)習(xí)的能力,項目的完成有利于學(xué)生對數(shù)據(jù)庫系統(tǒng)和軟件項目開發(fā)過程有一個整體的把握。
在評價方法上,力求從多角度全面客觀地評價學(xué)生掌握知識和技能的情況。綜合成績由3部分組成:平時成績占20%,成績來源于課程第一模塊的SQL Server的上機作業(yè)題平均分;開卷筆試和上機考試占40%,筆試部分考查關(guān)系型數(shù)據(jù)庫的設(shè)計,上機考試考查對SQL Server的綜合使用;課程設(shè)計作品占40%,從選題、數(shù)據(jù)庫設(shè)計、應(yīng)用軟件設(shè)計、程序運行情況和測試數(shù)據(jù)量、課程報告5個維度進(jìn)行評價,要求學(xué)生對作品進(jìn)行解說和演示,回答教師問題,并提交一套完整的課程設(shè)計報告、數(shù)據(jù)庫文件和應(yīng)用系統(tǒng)程序。
為優(yōu)化評價手段,我們開發(fā)了一套SQL作業(yè)的自動化批改平臺,用于對課程第一模塊的SQL Server上機實驗題進(jìn)行自動批改,也用于上機考試判卷。較傳統(tǒng)的人工批改的方式,自動化批改提高了效率,降低了誤判率。系統(tǒng)主要包含批改模塊和成績展示模塊,其中批改模塊負(fù)責(zé)對學(xué)生提交的SQL作業(yè)文檔進(jìn)行解析和批改,開發(fā)語言為Java,學(xué)生實驗數(shù)據(jù)庫為教師指定的SQL Server案例數(shù)據(jù)庫,成績數(shù)據(jù)庫使用MySQL數(shù)據(jù)庫;成績展示模塊提供Web訪問方式,用于學(xué)生查詢作業(yè)成績和詳細(xì)情況,開發(fā)語言為PHP,使用ThinkPHP框架。通過此模塊,學(xué)生登錄后即可清楚每次作業(yè)完成的具體情況和錯誤原因(邏輯錯誤或SQL語法出錯),從而提高對各個知識點的掌握水平。
數(shù)據(jù)庫系統(tǒng)實踐課程是計算機專業(yè)重要的實踐類必修課,在大數(shù)據(jù)時代的背景之下,華東師范大學(xué)計算機科學(xué)技術(shù)系課程組引入前沿的教學(xué)內(nèi)容,在教學(xué)方法和評價手段等方面進(jìn)行改革實踐,得到了學(xué)生的廣泛好評。評教結(jié)果顯示,此課程在2016-2017年下學(xué)期的評教中得到了4.92分的成績(滿分5分),院系有效相對排名為2/45,學(xué)生的反饋積極正面,如“老師備課充分,教學(xué)目標(biāo)明確,教學(xué)內(nèi)容豐富,教學(xué)方法與手段適當(dāng)”“能擴展知識面”以及“通過學(xué)習(xí)實踐,自己的綜合能力有所提高”等。學(xué)生們普遍認(rèn)為自己在數(shù)據(jù)庫設(shè)計和應(yīng)用開發(fā)、數(shù)據(jù)庫管理系統(tǒng)的使用以及對大數(shù)據(jù)的存取技術(shù)方面的知識和能力得到了提高。
華東師范大學(xué)的教學(xué)改革表明了改革實施的可行性和有效性,但實踐過程中仍存在一些問題。由于學(xué)生開發(fā)經(jīng)驗和實踐經(jīng)驗都比較缺乏,有些同學(xué)在進(jìn)行數(shù)據(jù)庫設(shè)計時容易把題目設(shè)計得很大,或者選一些自己不太熟悉的應(yīng)用領(lǐng)域進(jìn)行設(shè)計,特別在引入NoSQL數(shù)據(jù)庫的內(nèi)容后,學(xué)生仍然對哪些場景可以且應(yīng)該使用NoSQL數(shù)據(jù)庫缺乏思路,這些問題也是今后的教學(xué)改革和實踐應(yīng)該注意解決的重點。
參考文獻(xiàn):
[1]DB-Engines Ranking [EB/OL]. [2017-06-10]. https://db-engines.com/en/ranking.
[2]塞得拉吉, 福勒. NoSQL精粹[M]. 愛飛翔, 譯. 北京: 機械工業(yè)出版社, 2013.
[3]夏英. 研究生高級數(shù)據(jù)庫系統(tǒng)技術(shù)課程建設(shè)與實踐[J]. 計算機教育, 2015(23): 4-6.
[4]劉智, 劉加伶, 閆河, 等.“數(shù)據(jù)庫”實踐環(huán)節(jié)的“驗證式”教學(xué)[J]. 計算機教育, 2009(15): 99-101.
[5]鄺勁筠, 杜金蓮. 數(shù)據(jù)庫原理實踐(SQL Server 2012). 北京: 清華大學(xué)出版社, 2015.
[6]MongoDB官網(wǎng) [EB/OL]. [2017-06-10]. https://www.mongodb.com/.
[7]Node. js官網(wǎng) [EB/OL]. [2017-06-10]. https://nodejs.org/en/.
[8]車?yán)? 崔巍, 王曉波, 等. 數(shù)據(jù)庫實踐類課程體系優(yōu)化方案研究[J]. 中國電力教育, 2013(34): 154-155.