摘要:本文針對目前數(shù)據(jù)庫原理課程實踐教學(xué)中存在諸多弊病,設(shè)計了數(shù)據(jù)庫系統(tǒng)原理的UBase綜合訓(xùn)練項目,該項目對于系統(tǒng)地鍛煉學(xué)生的實踐能力和動手能力具有一定的啟發(fā)指導(dǎo)作用。
關(guān)鍵詞:數(shù)據(jù)庫;UBase項目;實踐教學(xué)
中圖分類號:G642
文獻標(biāo)識碼:B
文章編號:1672-5913(2008)06-0039-02
在數(shù)據(jù)庫原理課程教學(xué)中,實踐教學(xué)具有特別重要的地位。然而傳統(tǒng)實踐教學(xué)模式存在諸多弊病,改革勢在必行。我院在此認識的基礎(chǔ)上,設(shè)計了數(shù)據(jù)庫系統(tǒng)原理UBASE綜合訓(xùn)練項目,通過完成UBASE綜合實驗進一步提高學(xué)生的實踐動手能力。
1UBase項目簡介
UBase項目是一個綜合性很強的設(shè)計開發(fā)項目,在完成整個項目的過程中將涉及到以下10門課程的相關(guān)知識,包括“數(shù)據(jù)結(jié)構(gòu)”、“數(shù)據(jù)庫系統(tǒng)原理”、“SQL語言”、“數(shù)據(jù)庫系統(tǒng)實現(xiàn)”、“C程序設(shè)計”、“C++程序設(shè)計”、“軟件工程”、“編譯原理”和“Linux操作系統(tǒng)”等課程。
UBase項目引導(dǎo)學(xué)生掌握設(shè)計開發(fā)一個名為UBase的數(shù)據(jù)庫管理系統(tǒng)的方法,學(xué)生將親手開發(fā)一個單用戶、可以執(zhí)行一些簡單SQL查詢的DBMS。通過該項目的實踐,可以讓學(xué)生弄明白DBMS的組成結(jié)構(gòu),也會明白執(zhí)行查詢時DBMS內(nèi)部究竟發(fā)生了什么?
為了幫助學(xué)生順利完成項目,在實驗開始之前,我們提前提供了UBase DBMS的最頂層和最底層模塊。最頂層模塊為解析器,用于對SQL查詢的解析并調(diào)用下層相應(yīng)的功能以實施各種關(guān)系操作;最底層模塊為磁盤的I/O層,用于從磁盤讀數(shù)據(jù)頁和向磁盤寫數(shù)據(jù)頁,這里的磁盤是指UNIX文件系統(tǒng)。
2UBase的體系結(jié)構(gòu)
UBase的體系結(jié)構(gòu)如圖1所示,頂層的解析器和底層的磁盤的I/O層管理由教師提供,由學(xué)生負責(zé)完成中間的五部分。
圖1UBase的體系結(jié)構(gòu)
3開發(fā)環(huán)境
UBase項目使用C++在Linux平臺下完成。編譯時在Makefile文件中加上CXXFLAGS = -g -Wall(表示打開所有警告)選項,可以讓C++在編譯時進行很多檢查,從而減少運行時錯誤。編輯工具采用vi源程序編輯器;程序編譯和連接工具選用make;編寫測試程序的腳本語言用perl;使用purify跟蹤內(nèi)存錯誤的工具;使用gdb作為調(diào)試工具;使用cvs版本作為控制工具。
4UBase項目的實驗內(nèi)容設(shè)計
UBase項目分為五個部分。第一部分實現(xiàn)緩存管理模塊,第二部分實現(xiàn)在頁上存儲變長記錄的類,第三部分實現(xiàn)堆文件,第四部分實現(xiàn)數(shù)據(jù)字典和一些應(yīng)用工具,第五部分實現(xiàn)一些關(guān)系操作符。UBase項目的目標(biāo)是實現(xiàn)一個迷你數(shù)據(jù)庫管理系統(tǒng)(UBase),雖然其功能遠比不上商業(yè)DBMS,但確實可以執(zhí)行一些相當(dāng)有用的查詢。
4.1磁盤空間管理模塊
UBase數(shù)據(jù)庫管理系統(tǒng)的最底層為磁盤I/O層。該模塊為UBase上層提供創(chuàng)建文件;刪除文件;打開文件;關(guān)閉文件;在文件中分配磁盤頁;回收文件中磁盤頁;讀文件中磁盤頁;向文件寫磁盤頁和取文件首頁頁號的功能,該模塊包括2個類:一個為文件類(class File),另一個為數(shù)據(jù)庫類(class DB)。該模塊的具體實現(xiàn)(源代碼)由教師提供,學(xué)生可以直接使用,但要求學(xué)生必須仔細閱讀文檔及源代碼,了解該實現(xiàn)的細節(jié)有助于完成項目的其他部分。
4.2緩存管理模塊
緩存管理模塊要為UBase數(shù)據(jù)庫管理系統(tǒng)實現(xiàn)一個緩存管理器。由于數(shù)據(jù)庫本身的大小通常為可用內(nèi)存的100到1000倍,在特定時刻,內(nèi)存中只能存放數(shù)據(jù)庫的一小部分,緩存管理器就是用來控制哪些頁應(yīng)該駐留在內(nèi)存中。每當(dāng)UBase的上層模塊發(fā)出數(shù)據(jù)頁請求,緩存管理器必須檢查請求的頁是否已經(jīng)在緩存池。如果在,緩存管理器只需簡單地返回該頁的指針;如果不在,緩存管理器要騰出一幀(如果該幀已臟,就必須先將其寫入磁盤),然后將請求的頁從磁盤讀入到內(nèi)存中騰出的幀。由于緩存池通常包含上千幀(大型數(shù)據(jù)庫管理系統(tǒng)在內(nèi)存中分配上GB的緩存)。每次頁請求都順序搜索一遍緩存池會影響性能,解決的辦法是用溢出桶散列表跟蹤每個緩存幀的狀態(tài)。
UBase項目的緩存替代策略采用給幀加Love/Hate標(biāo)記的算法和時鐘算法,其效果類似LRU和MRU。
緩存管理器包含三個類:
(1) BufMgr類,緩存管理器的主類。
(2) BufHashTbl類,用來形成映射文件及頁號到緩存池幀號的散列表。
(3) BufDesc類,用來跟蹤每個緩存幀的狀態(tài)。
BufMgr類只有一個實例。BufMgr類的一個關(guān)鍵組成部分就是緩存池本身,是用幀數(shù)組實現(xiàn)的。BufHashTbl類也只有一個實例,該實例將是BufMgr類的一個私有數(shù)據(jù)成員。假設(shè)緩存池總共包含N個幀,則BufMgr類將擁有另外一個私有數(shù)據(jù)成員,他是由包含N個BufDesc類實例的矢量組成的。
除了以上的類和類的實例,還有一個“未釘住的”(unpinned)緩存池幀的雙向鏈表?!拔瘁斪 笔侵府?dāng)前沒有被數(shù)據(jù)庫管理系統(tǒng)上層對象使用的幀,因而是可以被緩存管理器交換出內(nèi)存的犧牲品?!搬斪〉摹?Pinned)頁是永遠不能被選中為替代對象的。這個雙向鏈表是通過把BufDesc類的所有實例鏈接在一起而實現(xiàn)的,指向該雙向鏈表兩端的指針是BufMgr類的私有數(shù)據(jù)成員。
4.3頁上存儲變長記錄的類
在UBbase的第二部分,要求實現(xiàn)一個page類。頁在數(shù)據(jù)庫中用來存放記錄,同時也是磁盤和緩存池交換數(shù)據(jù)的單位。緩存池在項目的第一部分實現(xiàn),一頁可以存放1到多條變長記錄,記錄是按插槽結(jié)構(gòu)存儲的。在這一部分,Page類的定義已經(jīng)提供,要求學(xué)生通過代碼完成對Page類的插入、刪除、更新記錄,得到下一條記錄、當(dāng)前記錄等具體操作。
4.4堆文件
UBase項目第三部分要實現(xiàn)一個堆文件管理器,用于提供文件的掃描功能、過濾功能(查找功能)、記錄插入功能及記錄的刪除功能等。堆文件層包括三個主要的類:FileHdrPage類,通過目錄頁(頁號的數(shù)組)實現(xiàn)堆文件結(jié)構(gòu);HeapFile類,實現(xiàn)記錄的插入和刪除功能;HeapFileScan類(從HeapFile類繼承而來),實現(xiàn)文件的掃描功能和過濾功能(查找功能)。
4.5數(shù)據(jù)字典和一些應(yīng)用工具
項目的第四部分將實現(xiàn)UBase一些前端命令和數(shù)據(jù)庫應(yīng)用工具,同時還要實現(xiàn)UBase的數(shù)據(jù)字典表的管理。為了幫助學(xué)生實現(xiàn)UBase前端命令,我們事先為學(xué)生提供了一個解析器來解析用戶命令和SQL命令(一個子集)。該解析器從標(biāo)準(zhǔn)輸入讀入一行命令,解析該行命令并調(diào)用適當(dāng)?shù)暮笈_函數(shù)進行處理。
4.6關(guān)系操作符
在UBase項目的第五部分,要實現(xiàn)查詢、插入和刪除操作的功能。查詢包括選擇、投影及連接算法,完成創(chuàng)建數(shù)據(jù)庫、新建表,查看表結(jié)構(gòu)、向表中插入記錄、刪除表中的記錄、修改表中的記錄、查詢表中的記錄、刪除表結(jié)構(gòu)、刪除數(shù)據(jù)庫等基本功能。
5測試程序的設(shè)計
在UBase項目的每一部分,都設(shè)計了測試程序,通過運行可執(zhí)行的測試程序可以檢查學(xué)生完成目標(biāo)的準(zhǔn)確性。
6評分標(biāo)準(zhǔn)
學(xué)生完成項目的某個部分后,必須提交源代碼。實驗課教師將檢查源代碼,編譯、運行和測試程序的準(zhǔn)確性。每部分的評分標(biāo)準(zhǔn)如表1所示:
7UBase項目的實施效果
數(shù)據(jù)庫原理UBase項目設(shè)計完成之后,考慮到本科學(xué)生實際動手能力和對知識理解深度的欠缺,先由新疆農(nóng)業(yè)大學(xué)計算機與信息工程學(xué)院的6名研究生和11名本科生具體實施,完成學(xué)生用UBase系統(tǒng)的框架設(shè)計之后,將UBase項目作為計算機科學(xué)與技術(shù)042班和信息管理與信息系統(tǒng)042班共144名學(xué)生的數(shù)據(jù)庫系統(tǒng)原理實驗課的必修作業(yè)?,F(xiàn)已完成教師用UBase項目的完整系統(tǒng)和UBase項目的實習(xí)手冊,并開設(shè)了UBase項目的學(xué)習(xí)網(wǎng)站和學(xué)習(xí)論壇,供學(xué)生和教師在線交流。經(jīng)過一年多的實踐,UBase項目在學(xué)生中收到預(yù)期的效果,鍛煉了學(xué)生的動手能力和實踐能力,也加深了學(xué)生對相關(guān)理論知識的理解,提高了學(xué)生學(xué)習(xí)理論知識的興趣。
參考文獻
[1] 瞿中. 數(shù)據(jù)庫教學(xué)方法改革的探索與實踐[J]. 黑龍江高教研究,2006,2(142):113-114.
[2] 胡軍,夏英,王國胤. “賽課結(jié)合”在數(shù)據(jù)庫原理實踐教學(xué)中的探索[J]. 實驗室研究與探索,2007,26(12):267-269.