葉 楓,孫 駿,黃 倩,李幽錚,李 凌
(1.河海大學計算機與信息學院,江蘇南京 211100;2.金陵科技學院建筑工程學院,江蘇南京 211169)
近40 年來,關系數據庫系統作為主流的數據庫模型,得到了學術界和工業(yè)界廣泛的研究與應用。隨著大數據和人工智能時代的到來,數據驅動的決策模式愈加普遍,但關系數據庫難以應對大數據的關鍵挑戰(zhàn):①表示不匹配。需要存儲的數據類型往往是非結構化的,不適合關系模型[1];②事務模型導致系統性能下降。關系數據庫提供了一種非常嚴格的事務控制模型(原子性、強一致性、隔離性和持久性,即ACID),而嚴格的事務模型往往會導致許多大數據系統的性能下降[2];③可伸縮性不強。擴展關系數據庫較為困難,并且需要不斷地調優(yōu)以保障運行效率[3]。因此,工業(yè)界、學術界研發(fā)了諸多NoSQL 數據庫[4]以適用于多樣化的大數據應用場景。通常,NoSQL 數據庫沒有嚴格的模型定義,且數據庫類型多樣(圖、寬列、鍵值、文檔、時間序列、多模數據庫等),差異化顯著。目前,NoSQL 數據庫的演化發(fā)展十分迅速,已經從2011 年的50余個發(fā)展到現在的200余個。
NoSQL 對工業(yè)界和學術界的影響也愈加深入。根據Forrester[5]最近的一項調查結果顯示,近50%的受訪企業(yè)或組織已經采用了NoSQL 解決方案。行業(yè)招聘的最新要求也表明,對接觸、熟悉NoSQL 的畢業(yè)生需求急劇增加。但是,當前相關課程的教學現狀是:依然重視關系數據庫[6],對NoSQL 的關注不夠;學生缺少NoSQL 數據庫的實踐能力,與業(yè)界要求大數據能力的鴻溝越拉越大。計算機科學作為一門學科,強調以問題為基礎的學習,真實的案例和使用經驗對提高計算機應用能力至關重要[7]。一些研究已經證實,通過實踐來學習能顯著地提升學習效果[8-9]。如何開展NoSQL 教學,一些代表性的研究[10-11]已經提出了有建設性的方案。但是,由于NoSQL 數量眾多、異構性強,傳統教學方式很難讓學生更深入、全面地理解和應用NoSQL 數據庫,特別是在未來工作中如何對眾多NoSQL 數據庫進行選型是一個難題。基于此,為了讓學生全面了解NoSQL 概念以及不同NoSQL 數據庫實例的差異性,提升學生的動手能力,提出一種新的NoSQL 數據庫實踐模式,即結合評測基準(Benchmarking)[12-14]的方法。
眾所周知,評測基準是系統選型、開發(fā)與優(yōu)化的重要驅動力量。如今,NoSQL 數據庫的評測基準持續(xù)吸引著數據即服務(Data as a Service)提供商以及眾多有意實現“上云用數賦智”的企業(yè)與相關科研人員等的關注。從數據即服務提供商角度,標準的評測基準有利于向服務消費者提供更豐富的應用場景支持,有效降低NoSQL 數據庫維護成本;從眾多企業(yè)的角度,可根據自身業(yè)務需要,快速選型大數據存儲解決方案,并減少數據遷移成本;從研究人員的角度,可利用評測基準評估新技術、優(yōu)化完善NoSQL 數據庫,推動其快速演化發(fā)展。顯然,若能將評測基準方法有效地與NoSQL 數據庫教學實踐結合,是非常有意義的。
該課程適用于軟件工程、計算機科學的本科高年級學生和研究生。在現有教學體系下,本科高年級學生和研究生通常已經完整地學習了數據庫系統基礎課程,也具備了以Java 語言為代表的編程能力。在此基礎上,開展NoSQL數據庫實踐教學,可以在充分利用前期所學知識的基礎上,更側重于NoSQL 數據庫的實踐內容。
作為一所重視本科教育的高校,教學環(huán)節(jié)非常強調課堂上的主動學習和課堂以外面向問題的學習。為了貫徹這一教學原則,在NoSQL 數據庫實踐教學中,有目的、有意識地安排了大量實驗和課堂活動,并要求學生仔細考慮如何將概念、知識應用到畢業(yè)后可能遇到的工作場景中。同時,為了鍛煉團隊的合作研發(fā)能力,特別要鍛煉學生與實際工作接軌的能力,課程實踐伊始就將3~5 人組為一個團隊,這也為后面基于Benchmarking 學習模式的實施提供了一個組織基礎。
通過瀏覽nosql-database.org 網站上NoSQL 數據庫現狀,不難發(fā)現,不同類型的NoSQL 數據庫均有其獨特性質,每一類NoSQL 數據庫又包括眾多不同實例。與標準的關系型數據庫不同,每個NoSQL 數據庫都是針對特定問題而開發(fā)的,并具有各自的基本概念和交互語言。一個關鍵問題是:如何開始了解NoSQL 課程涉及的概念和數據庫實例?可以想象,采用教SQL 和關系數據庫的技術與方法講授NoSQL 數據庫是不切實際的。針對此問題,可以認識到:在實踐教學中,選擇每一類中最知名和有代表性的NoSQL 數據庫實例作為講解基礎,充分利用為期12周的教學時間來介紹4~5 種NoSQL 系統,并通過分組讓學生們開展某一類NoSQL 的Benchmarking 實驗是一種好的教學途徑。具體而言,從以下幾類NoSQL 數據庫中選擇最有代表性和流行的工具:①面向文檔的數據庫MongoDB;②圖數據庫Neo4J;③鍵值數據庫Redis;④列族數據庫Cassandra;⑤時間序列數據庫Riak TS、Druid 和IoTDB;⑥多模數據庫ArangoDB、OrientDB。
每個系統都涵蓋數據建模、查詢、擴展和建立一個Benchmarking 系統。課程目標如下:①解釋代表性的NoSQL 數據庫的基本存儲結構和訪問技術,包括鍵值數據庫、文檔數據庫、圖數據庫、列族數據庫、時間序列數據庫以及多模數據庫;②熟悉代表性的NoSQL 數據庫的典型操作,如每類NoSQL 數據庫的查詢操作、數據建模等;③識別新數據庫與先前已知數據庫之間的語義相似性和差異性(例如圖數據庫的索引機制、文檔數據庫的分片機制等),并區(qū)分常用的一致性模型;④根據要存儲的數據和期望的可用性、可伸縮性及一致性要求,討論如何部署NoSQL/SQL 數據庫;⑤在UCI 機器學習庫、Kaggle 等網站選用不同數據集,在Benchmarking 實驗基礎上,研究如何對NoSQL數據庫進行選型。在每學期實踐教學中,根據學生和行業(yè)領域工程師的反饋,對上述主題進行擴展細化。
如何選用教材也是NoSQL 課程實踐能取得成功的關鍵。由于NoSQL 數據庫的發(fā)展和演化速度非???,相應地,目前市面上也涌現了眾多內容豐富,且具有實用性的相關教材,例如:陸嘉恒[15]著的《大數據挑戰(zhàn)與NoSQL 數據庫技術》、袁燕妮[16]著的《NoSQL 數據庫技術》等。對于這些教材,本研究邀請多名領域專家、業(yè)內專業(yè)工程師等采用打分的方式,為該課程選擇合適的教材。另外,該實踐課程也將NoSQL 數據庫發(fā)布的官方文檔作為補充教材,因為這些文檔很好地概述了數據模型、查詢語言以及常見用例和遇到的問題等。
為了開展NoSQL 數據庫的Benchmarking 實驗,在實踐環(huán)節(jié)中,為每組學生配備了3 臺虛擬機構成的集群,并安裝了最新版本的Ubuntu。每臺機器有16 GB 內存、500 GB硬盤和4核i5的CPU。這些機器既可以由學院現有基礎設施提供,也可以租用阿里云環(huán)境。學生們使用這些機器集群來安裝NoSQL 數據庫,并跟隨課堂上介紹的概念熟悉其操作。
隨著NoSQL 數據庫的快速發(fā)展,持續(xù)學習變得日益重要,有必要要求選課的學生探索其現有知識庫和所遇到的新范例之間的聯系。在整個實踐課程中,重點是讓學生們結合實際進行學習與思考,最終掌握NoSQL 數據庫的關鍵細節(jié)。此外,NoSQL 數據庫選型是一個關鍵問題,目前沒有現成方式可以用來為各種應用場景選擇合適的NoSQL系統。因此,學生們必須通過一些不同的數據集,在學習基本概念和知識的基礎上,對這些NoSQL 數據庫進行Benchmarking 實驗??紤]到這些目標,構建一個雙層學習模式,具體包含課堂概念與實踐、基于NoSQL 數據庫的Benchmarking 實驗兩個層面,其實質也是從定性到定量研究NoSQL 數據庫的過程。該模式將為學生提供大量機會來實踐如何更好地應用NoSQL 數據庫的重要技能,做到有的放矢。
自主學習已被證明在闡述計算機科學概念方面是非常有效的,特別是數據庫[17-18]。每節(jié)課的設計都考慮到這一點,并針對課堂上涉及的各種概念、技術和數據庫重點設置了如下課堂內容:
(1)基本概念講解。結合上文所述NoSQL 數據庫文檔,對每一種NoSQL 數據庫是什么、為什么使用及其關鍵特征進行講解,讓學生們熟悉不同NoSQL 數據庫的關鍵概念和基礎知識。
(2)數據建模練習。NoSQL 數據建模傾向于強調數據聚合、非規(guī)范化數據、數據訪問模式以及數據結構支持等。根據以往經驗,數據建??煽醋饕粋€跨越這些約束的優(yōu)化問題。因此,學生需要較多地練習才能掌握。首先在課堂上用交互式的方式指導學生建模案例,課程結束后,要求每個團隊模仿完成一個樣本數據建模活動。團隊必須提出一個數據模型,并根據前面提到的標準為其設計提供理論依據?;顒咏Y束時,各團隊向班級匯報工作,并由任課教師對各團隊的設計進行分析和完善。
(3)現場編程能力提升。現場編程涉及對NoSQL 系統的增、刪、改、查等主要操作。之后,學生有能力對類似的數據集、問題域開展編程工作。通過該方式,讓學生在虛擬機集群上將NoSQL 操作與實際編程結合起來,有助于提升其實踐信心與深入學習的興趣。
在現代數據庫世界中,特征驅動了數據庫選擇,而一個大數據應用系統中具有多個數據庫工具是較為常見的。NoSQL 開發(fā)、管理人員需要識別并選擇正確的數據庫,快速學習并利用不同的NoSQL 數據庫來滿足實際要求。因此,在NoSQL 數據庫實踐教學中,學生同樣被要求識別一個特定的NoSQL 數據庫,并以團隊形式進行研究。具體方法就是針對一類NoSQL 數據庫,設計并實現Benchmarking實驗,最終完成一份Benchmarking 實驗報告。
在該階段,每個團隊成員首先需要結合教材、文檔等,安裝部署所選的NoSQL 數據庫。接下來,團隊成員分工設計并編程,實現多類負載(workloads)生成、數據集準備和評測指標度量(例如CPU 使用率、吞吐量等)。例如,在時間序列數據庫的Benchmarking 實驗中,任課教師結合專業(yè)特色,提供了水文傳感器數據集[19]。學生們可以用Java 編程實現如下負載:①不同數據規(guī)模的傳感器數據加載或數據插入;②按時間間隔查詢某采樣點數據;③按照一定的時間間隔,查詢多個采樣點數據;④隨著傳感器流數據不斷注入NoSQL 數據庫,增加查詢次數;⑤在保持查詢次數的同時,增加傳感器采樣的數據量;⑥按多個時間間隔查詢采樣點數據;⑦使用GroupBy 聚合查詢;⑧索引查詢。然后,根據不同負載下的執(zhí)行結果,各個小組可以整理分析報告,設計與實現NoSQL 數據庫Benchmarking 實驗過程,既可以讓選課學生從定量層面更深入地了解同類NoSQL數據庫不同實例之間的差別,又可以了解不同類型NoSQL數據庫的差別。最后,各組學生完成一份NoSQL 數據庫評測報告,并在班級層面上進行分享交流,匯報所測評NoSQL 數據庫的結論。該方式可以讓學生快速而全面地了解不斷發(fā)展的NoSQL 數據庫,為后續(xù)使用NoSQL 數據庫奠定了良好基礎。
對于該課程的評價,采用階段評價和結課評價相結合的方式。在教學階段,通過定期開展匿名調查的方式來獲取學生對課程教學效果的反饋。團隊任課教師會定期回應學生關注的問題,根據學生的反饋提供相關材料并完善實驗內容,以提高學生的學習水平。除定期反饋外,課程結束時還將對學生進行總結性評估??偨Y性評估通常包括下列方面:①從總體上評價此課程;②評價個人在課堂上的學習質量;③描述本課程的一個或多個優(yōu)點;④描述一個或多個改進課程的方法;⑤任課教師是否為課程作好了充分準備;⑥任課教師是否使用了幫助我學習的教學技巧;⑦解釋你給任課教師等級或評價的依據;⑧解釋通過學習,個人達到了怎樣的水平;⑨還有哪些內容是期望學習到的;⑩該門課程對于未來的學習和就業(yè)有哪些具體幫助等。
從近5 年授課的調研結果來看,任課教師從這些問題上得到的反饋是積極、正面的。據統計,92%的學生認為自己的實踐能力得到了有效提高,并且對大數據相關技術有了更多了解,這也為該課程的發(fā)展方向提供了另一個好的數據分析源。也有不少教師和學生建議,隨著實驗內容的豐富,可以將實驗項目開源或者將其應用于一些較大的項目中。由于篇幅限制,對于學習評價的進一步研究在此不再深入討論。列舉部分學生的課程體會:“內容很有趣,值得學習;這些實驗對我們加強對NoSQL 數據庫的認識很有幫助;學習數據庫如何確保多語言持久性和水平可擴展將對我的工作非常有幫助;當我終于弄清楚Druid、Riak TS和IoTDB 數據庫之間的差異時,我感到非常有成就感。”另外,還有多篇關于NoSQL 數據庫基準測評的論文在計算機學會推薦的會議和期刊上發(fā)表,如Journal of Database Management、ICA3PP、COMPSAC 和HPCC 等。
NoSQL 數據庫已越來越多地應用于驅動行業(yè)中,并被各種組織迅速采用。目前,計算機科學課程主要集中在關系系統上,而對NoSQL 范例關注不夠。接觸和體驗各種NoSQL 范例和數據模型是學生技能集的關鍵部分,將有助于其成功過渡到行業(yè)。并且,學生通過基準測評多種NoSQL 范例,能更加深入、全面地了解和使用NoSQL 數據庫。學生評估結果驗證了該實踐教學模式的效果。未來將在此基礎上積累一批基于NoSQL 數據庫的項目案例,嘗試以開源形式供更多NoSQL 愛好者學習和使用。