竇 亮,徐 飛,谷林濤
(華東師范大學 計算機科學技術系,上海 200062)
隨著Web2.0網站的興起,各領域數據量呈現爆發式增長,大數據時代業已來臨。傳統的關系型數據庫在存儲和處理高并發和多樣的海量數據時,或是成本代價過高,或是難以給出令人滿意的解決方案,NoSQL(Not only SQL)技術為解決這些問題提供了新的方案。NoSQL數據庫具有多種類型,特點各不相同,更加適合大數據的存儲和管理,應用于不同的Web2.0場景獲得了巨大的成功。根據業內權威的DB Engines排行榜[1]數據顯示,雖然目前排名前三的數據庫仍是關系型數據庫(Oracle、MySQL和SQL Server),但典型的NoSQL數據庫MongoDB、Cassandra、Redis等已進入前十位的排名,且市場占有率的增長非常穩定。
在現今大數據的背景之下,關系型數據庫已不再是唯一的選擇,但NoSQL數據庫也不會直接取代關系型數據庫,數據庫領域正進入“混合持久化”(polyglot persistence)的時代[2],應用程序可以使用多種技術來管理數據。
作為數據庫原理課程的延伸,數據庫系統實踐課程開設的目的是培養學生的數據庫設計、數據庫系統的管理和應用開發能力,使學生能夠靈活地運用數據庫技術解決實際的應用問題。原有的課程內容包括:以主流的關系型數據庫Microsoft SQL Server作為實驗環境,要求學生掌握SQL Server數據庫的基本操作;教師給出典型的數據庫設計案例和應用系統開發實例,通過分析講解,讓學生掌握數據庫建模和設計的基本方法,要求學生自選題目完成一個完整的數據庫應用系統的設計與實現。
在較長的時期中,課程教學內容以關系型數據庫的應用實踐為主,在目前大數據背景下,需要引入NoSQL數據庫的教學內容,更好地適應時代的需求,但引入這部分教學內容并非輕而易舉,主要面臨以下問題。
(1)大數據處理和NoSQL技術涉及的內容繁多,市場上NoSQL數據庫產品也十分繁雜,不同產品適合不同的應用場景,在學習的初始階段需要進行大量的摸索和實踐,然而目前這方面系統的參考資料卻非常少,適合本科生學習和實踐的教材更加稀少。
(2)引入NoSQL技術教學內容之后,課程涉及的內容顯得更加多層次,對于專業水平尚在提升階段的本科生而言,同時理解關系型和非關系型這兩種完全不同的數據庫技術會是一個難點。
可見,教師需要精心選取合適的教學案例,科學地設計課程實施方法,才能更好地激發學生對新技術、新趨勢的熱情,滿足不同層次學生的需求,擁抱大數據時代。
數據庫技術涉及的內容是多層次的,可從數據庫應用、數據庫系統理論和數據庫新技術等多個角度來看[3],引入的NoSQL數據庫內容屬于數據庫新技術部分。引入新內容后,本課程涉及的內容更加豐富,但總體課時數有限,因此,針對本科生的教學需求調整教學內容成為首要問題。華東師范大學計算機科學技術系此門課程為2個學分,18個課時上課,36個課時上機實驗。經過討論,課程組大大簡化了原來和特定DBMS比較相關的數據庫備份與恢復、安全控制的內容,只對這部分內容做基本介紹,而增加了對NoSQL數據庫應用技術的介紹。
調整后課程知識模塊分成4部分。第1部分主題是SQL Server數據庫管理系統,通過大量驗證型的上機練習,使學生對關系型數據庫理論有更加實際和深入的理解。第2部分主題是關系型數據庫的設計,介紹4個典型的數據庫設計案例,對數據庫設計方法學進行解說,分析常見問題和錯誤,使學生能夠具備設計出符合實際業務需求的數據庫的核心素養。第3部分主題是數據庫應用開發,介紹數據庫應用系統的體系結構和常見數據庫訪問技術,完整地演示一個數據庫應用系統開發的小型案例,要求學生根據自己的情況,至少掌握一種數據庫訪問技術。第4部分主題是NoSQL數據庫,這部分對NoSQL技術的介紹不求面面俱到,也不對各種NoSQL技術的理論做深入剖析,只做基本的介紹,選取文檔型數據庫MongoDB作為代表進行介紹,通過分析兩個案例,讓學生了解NoSQL數據庫的應用場景和解決方案。調整后的知識模塊和課時分配見表1。

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