呂太之
(江蘇海事職業(yè)技術(shù)學(xué)院信息工程學(xué)院 江蘇南京 211170)
?
模擬數(shù)據(jù)庫管理系統(tǒng)的設(shè)計與實(shí)現(xiàn)
呂太之
(江蘇海事職業(yè)技術(shù)學(xué)院信息工程學(xué)院 江蘇南京 211170)
為了讓計算機(jī)應(yīng)用專業(yè)的學(xué)生深入掌握數(shù)據(jù)庫原理、算法、網(wǎng)絡(luò)編程、多線程、Java編程語言、軟件工程等技術(shù),開發(fā)了一套模擬數(shù)據(jù)庫管理系統(tǒng)。該系統(tǒng)包括了數(shù)據(jù)庫管理系統(tǒng)的基本功能,有建庫、建表、增刪改查等操作。使用Java語言實(shí)現(xiàn)了該系統(tǒng),采用了MVC模式來提高代碼復(fù)用。
數(shù)據(jù)庫管理系統(tǒng); Java; MVC; 網(wǎng)絡(luò)編程; 多線程
在計算機(jī)應(yīng)用專業(yè)的日常教學(xué)工作中,很多技術(shù)僅通過理論講解很難讓學(xué)生掌握,而大部分成熟系統(tǒng)由于不開源和功能復(fù)雜,也很難通過剖析該類系統(tǒng)來強(qiáng)化學(xué)生的理論學(xué)習(xí)。為了提高教學(xué)質(zhì)量,很多著名大學(xué)都通過簡化的模擬系統(tǒng)來輔助教學(xué),如斯坦福大學(xué)使用一個類似于Java語言的karel模擬框架輔助編程方法學(xué)課程的教學(xué)[1],Andrew S.開發(fā)了一個類Unix操作系統(tǒng)Minix用于操作系統(tǒng)課程的教學(xué)工作[2]。
在數(shù)據(jù)庫的教學(xué)過程中,由于成熟的數(shù)據(jù)庫管理系統(tǒng)功能過于復(fù)雜,并不適合輔助基本理論的講解?;诖碎_發(fā)了模擬數(shù)據(jù)庫管理系統(tǒng)來輔助理論教學(xué),讓學(xué)生能更加深刻地掌握數(shù)據(jù)庫技術(shù)的基本原理,如數(shù)據(jù)模型、關(guān)系模式、索引機(jī)制、SQL語言、網(wǎng)絡(luò)數(shù)據(jù)庫、數(shù)據(jù)文件等。模擬數(shù)據(jù)庫軟件系統(tǒng)實(shí)現(xiàn)了數(shù)據(jù)庫管理系統(tǒng)(Database Management System DBMS)的基本功能,命名為ABC Server。系統(tǒng)實(shí)現(xiàn)參照如SQL Server、MySQL等主流的數(shù)據(jù)庫管理系統(tǒng),將整個系統(tǒng)分為服務(wù)器端、客戶端工具和Java數(shù)據(jù)庫連接(Java Database Connectivity JDBC)驅(qū)動三個部分。將模擬數(shù)據(jù)庫管理系統(tǒng)應(yīng)用于教學(xué)工作中,有助于學(xué)生更深入地了解數(shù)據(jù)庫的基本原理,由于該系統(tǒng)的實(shí)現(xiàn)涉及到多線程、網(wǎng)絡(luò)編程、Java語言、正則表達(dá)式等技術(shù),也可以應(yīng)用于編程相關(guān)課程的教學(xué)工作。
服務(wù)器接受客戶端的請求,根據(jù)客戶端的命令完成相應(yīng)的功能。主要實(shí)現(xiàn)的功能包括數(shù)據(jù)庫的創(chuàng)建、修改和查詢,數(shù)據(jù)表的操作、增刪改查、大數(shù)據(jù)的導(dǎo)入和導(dǎo)出等。查詢操作支持排序、過濾等操作。圖1顯示服務(wù)器實(shí)現(xiàn)的功能。
圖1 服務(wù)器端功能圖
雙擊服務(wù)器端程序,點(diǎn)擊啟動按鈕可以啟動服務(wù)器端程序。也可以設(shè)置為打開服務(wù)器端程序自動啟動服務(wù)。使用JavaService程序?qū)⒎?wù)器端程序設(shè)置為自動啟動,服務(wù)器端程序可以隨操作系統(tǒng)同時啟動。服務(wù)器執(zhí)行流程如圖2所示。
圖2 服務(wù)器執(zhí)行流程
客戶端工具通過圖形界面完成諸如登錄、SQL操作、大數(shù)據(jù)傳遞等功能。用戶輸入用戶名和密碼登入系統(tǒng)后,在主界面中輸入各類SQL命令,點(diǎn)擊執(zhí)行按鈕后,客戶端將命令傳遞給服務(wù)器,服務(wù)器將結(jié)果返回給客戶端,客戶端提供文本和表格兩種顯示方式。圖3顯示了客戶端的功能列表,圖4顯示了客戶端的功能界面。
圖3 客戶端功能列表
圖4 客戶端界面
JDBC(Java Data Base Connectivity,Java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的API,Java語言只提供了基本的接口,具體的實(shí)現(xiàn)需要各個數(shù)據(jù)庫系統(tǒng)廠商來實(shí)現(xiàn)[3]。這樣用戶就可以通過統(tǒng)一的接口來完成數(shù)據(jù)庫的操作。圖5顯示了JDBC接口調(diào)用方式。
圖5 JDBC調(diào)用方式
JDBC驅(qū)動類型分為四種,為ABC數(shù)據(jù)庫管理系統(tǒng)實(shí)現(xiàn)了Java網(wǎng)絡(luò)驅(qū)動程序。主要需要實(shí)現(xiàn)的接口包括Driver、Connection、Statement和ResultSet。Java庫提供了DriverManage類來完成驅(qū)動程序的管理。DriverManger完成了驅(qū)動程序的注冊/刪除,URL驅(qū)動判斷、建立Connection等功能。
驅(qū)動首先需要完成的就是對應(yīng)數(shù)據(jù)庫驅(qū)動Driver類的實(shí)現(xiàn),然后通過該驅(qū)動類獲取對應(yīng)驅(qū)動程序的Connetion、Statement和ResultSet實(shí)現(xiàn)類。客戶端通過Class.forName(“驅(qū)動全路徑類名”)加載驅(qū)動,然后通過驅(qū)動類的靜態(tài)代碼段實(shí)現(xiàn)該驅(qū)動向DriverManage的注冊。注冊方法就是調(diào)用DriverManager的registerDriver類。本系統(tǒng)的注冊方式如下:
DriverManager.registerDriver(new jmi.database.ABCServerDriver());
Driver接口需要實(shí)現(xiàn)的方法主要有acceptsURL和connect方法。acceptsURL方法用來該驅(qū)動匹配的url地址,ABC數(shù)據(jù)庫管理系統(tǒng)定義的URL協(xié)議如下:
jdbc:abc://
Connect方法建立客戶端程序和數(shù)據(jù)庫服務(wù)之間的連接,DrvierManager. getConnection通過url地址調(diào)用對應(yīng)驅(qū)動Driver類的connection完成客戶端與服務(wù)器之間的連接。ABC數(shù)據(jù)庫驅(qū)動通過Socket網(wǎng)絡(luò)協(xié)議建立了客戶端與數(shù)據(jù)庫服務(wù)之間的一條通道,通過Socket將客戶端的命令發(fā)送給服務(wù)器端,將服務(wù)器的結(jié)果返回給客戶端。
4.1 海量數(shù)據(jù)排序
在大數(shù)據(jù)導(dǎo)入和未建索引的列上進(jìn)行排序操作的時候,由于海量數(shù)據(jù)無法一次性加載到內(nèi)存中進(jìn)行排序,只能借助硬盤完成排序操作。排序采用的是一種“排序—?dú)w并”的策略。在排序階段,先讀入能放在內(nèi)存中的數(shù)據(jù),將其排序后輸出到一個臨時文件,依次進(jìn)行,將待排序數(shù)據(jù)組織為多個有序的臨時文件,而后在歸并階段將這些臨時文件組合為一個大的有序文件,即為排序結(jié)果。
4.2 SQL語法驗證
通過正則表達(dá)式完成SQL語句的驗證和內(nèi)容的提取。正則表達(dá)式描述了一種字符串匹配的模式,可以用來驗證某個字符串是否符合某種模式,也可以將模式匹配的子串提取出來[4]。
4.3 數(shù)據(jù)壓縮技術(shù)
為了加快客戶端與服務(wù)器端海量數(shù)據(jù)的傳遞,提高數(shù)據(jù)上傳效率,采用了分塊壓縮算法,客戶端采用RandomAccessFile類并發(fā)讀入海量數(shù)據(jù)文件,然后分塊壓縮傳遞給服務(wù)器端,服務(wù)器根據(jù)標(biāo)記解壓縮數(shù)據(jù),然后將數(shù)據(jù)存儲到服務(wù)器中。壓縮使用基于并行的Gzip壓縮算法,性能上得到極大的提升[5]。
4.4 索引的建立
由于數(shù)據(jù)是存儲在硬盤上,而I/O操作是非常耗時的。對于海量數(shù)據(jù)而言,索引也是非常大的,也不可一次加載到內(nèi)存中。為了減少I/O操作,本文選自了B+樹來實(shí)現(xiàn)索引,根據(jù)局部性原理和磁盤預(yù)讀的特點(diǎn),提高了查找的效率[6]。
在計算機(jī)應(yīng)用專業(yè)教學(xué)工作中,有些內(nèi)容僅僅通過理論的講解無法讓學(xué)生深入地掌握。而通過一些簡易的模擬軟件可以使學(xué)生更容易掌握相關(guān)的知識,基于此開發(fā)了數(shù)據(jù)庫模擬系統(tǒng)ABC Server。該系統(tǒng)是一個簡化版本的數(shù)據(jù)庫管理系統(tǒng),融入了數(shù)據(jù)結(jié)構(gòu)、網(wǎng)絡(luò)編程、數(shù)據(jù)庫原理、SQL、多線程、Java編程等知識和技術(shù)。
模擬數(shù)據(jù)庫系統(tǒng)在數(shù)據(jù)庫原理和技術(shù)、Java編程、計算機(jī)網(wǎng)絡(luò)等課程教學(xué)中的應(yīng)用使得學(xué)生更容易掌握相關(guān)的技術(shù),提高了教學(xué)質(zhì)量和效果。但在教學(xué)的過程中也發(fā)現(xiàn)了一些問題,如查詢優(yōu)化是數(shù)據(jù)庫技術(shù)中重要的方面,但是當(dāng)前的版本并不支持,還有編程規(guī)范性欠缺,不利于養(yǎng)成學(xué)生好的編程習(xí)慣。在后續(xù)的版本中將進(jìn)一步完善這些不足,同時融入大數(shù)據(jù)、移動數(shù)據(jù)庫等新的理念,使其能更好地服務(wù)于計算機(jī)應(yīng)用專業(yè)的教學(xué)工作。
[1] 馬德云. 斯坦福大學(xué)《編程方法》公開課介紹[J]. 課程教育研究(新教師教學(xué)), 2015(25):20-21.
[2] 劉珊珊. Minix操作系統(tǒng)的分析、改進(jìn)與測評[D]. 成都:電子科技大學(xué), 2009:11-13.
[3] 夏瀟, 鐘毅. 一種增強(qiáng)型結(jié)果集訪問關(guān)系數(shù)據(jù)庫組件性能的評估[J]. 科技通報, 2014(11):75-80.
[4] 高愛英, 王紅劍. 利用正則表達(dá)式實(shí)現(xiàn)索引自動排序[J]. 中國科技期刊研究, 2014(2):222-224.
[5] 宋剛, 蔣孟奇, 張云泉,等. 基于共享存儲和Gzip的并行壓縮算法研究[J]. 計算機(jī)工程與設(shè)計, 2009(4):781-784.
[6] 耿慶田, 狄婧, 常亮,等. 基于B+樹的數(shù)據(jù)索引存儲[J]. 吉林大學(xué)學(xué)報:理學(xué)版, 2013(6):1133-1136.
[責(zé)任編輯:李娟]
Development and Realization of Simulated Database Management System
Lü Taizhi
(School of Information Technology, Jiangsu Maritime Institute, Nanjing 211170, China)
In order to make computer application majored students master the principles of database, network programming, multi-threading, Java programming language, software engineering and other technologies better, a simulated database management system is designed and implemented. This system includes the basic function of the database management system, such as creating database, creating tables, and CRUD (create retrieve update delete) operations. This system is implemented by Java language, and uses the MVC model improves code reusing.
database management system; Java; MVC; network programming; multi-threading
2016-06-20
第二屆江蘇省高校中青年骨干教師和校長境外研修項目;江蘇海事職業(yè)技術(shù)千帆團(tuán)隊建設(shè)項目(201507)
呂太之(1979-),男,講師、高級工程師,主要研究方向:計算機(jī)應(yīng)用、職業(yè)教育
TP 311.13
A
1672-2434(2016)05-0016-03
常州信息職業(yè)技術(shù)學(xué)院學(xué)報2016年5期