吕太之
(江苏海事职业技术学院信息工程学院 江苏南京 211170)
模拟数据库管理系统的设计与实现
吕太之
(江苏海事职业技术学院信息工程学院 江苏南京 211170)
为了让计算机应用专业的学生深入掌握数据库原理、算法、网络编程、多线程、Java编程语言、软件工程等技术,开发了一套模拟数据库管理系统。该系统包括了数据库管理系统的基本功能,有建库、建表、增删改查等操作。使用Java语言实现了该系统,采用了MVC模式来提高代码复用。
数据库管理系统; Java; MVC; 网络编程; 多线程
在计算机应用专业的日常教学工作中,很多技术仅通过理论讲解很难让学生掌握,而大部分成熟系统由于不开源和功能复杂,也很难通过剖析该类系统来强化学生的理论学习。为了提高教学质量,很多著名大学都通过简化的模拟系统来辅助教学,如斯坦福大学使用一个类似于Java语言的karel模拟框架辅助编程方法学课程的教学[1],Andrew S.开发了一个类Unix操作系统Minix用于操作系统课程的教学工作[2]。
在数据库的教学过程中,由于成熟的数据库管理系统功能过于复杂,并不适合辅助基本理论的讲解。基于此开发了模拟数据库管理系统来辅助理论教学,让学生能更加深刻地掌握数据库技术的基本原理,如数据模型、关系模式、索引机制、SQL语言、网络数据库、数据文件等。模拟数据库软件系统实现了数据库管理系统(Database Management System DBMS)的基本功能,命名为ABC Server。系统实现参照如SQL Server、MySQL等主流的数据库管理系统,将整个系统分为服务器端、客户端工具和Java数据库连接(Java Database Connectivity JDBC)驱动三个部分。将模拟数据库管理系统应用于教学工作中,有助于学生更深入地了解数据库的基本原理,由于该系统的实现涉及到多线程、网络编程、Java语言、正则表达式等技术,也可以应用于编程相关课程的教学工作。
服务器接受客户端的请求,根据客户端的命令完成相应的功能。主要实现的功能包括数据库的创建、修改和查询,数据表的操作、增删改查、大数据的导入和导出等。查询操作支持排序、过滤等操作。图1显示服务器实现的功能。
图1 服务器端功能图
双击服务器端程序,点击启动按钮可以启动服务器端程序。也可以设置为打开服务器端程序自动启动服务。使用JavaService程序将服务器端程序设置为自动启动,服务器端程序可以随操作系统同时启动。服务器执行流程如图2所示。
图2 服务器执行流程
客户端工具通过图形界面完成诸如登录、SQL操作、大数据传递等功能。用户输入用户名和密码登入系统后,在主界面中输入各类SQL命令,点击执行按钮后,客户端将命令传递给服务器,服务器将结果返回给客户端,客户端提供文本和表格两种显示方式。图3显示了客户端的功能列表,图4显示了客户端的功能界面。
图3 客户端功能列表
图4 客户端界面
JDBC(Java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的API,Java语言只提供了基本的接口,具体的实现需要各个数据库系统厂商来实现[3]。这样用户就可以通过统一的接口来完成数据库的操作。图5显示了JDBC接口调用方式。
图5 JDBC调用方式
JDBC驱动类型分为四种,为ABC数据库管理系统实现了Java网络驱动程序。主要需要实现的接口包括Driver、Connection、Statement和ResultSet。Java库提供了DriverManage类来完成驱动程序的管理。DriverManger完成了驱动程序的注册/删除,URL驱动判断、建立Connection等功能。
驱动首先需要完成的就是对应数据库驱动Driver类的实现,然后通过该驱动类获取对应驱动程序的Connetion、Statement和ResultSet实现类。客户端通过Class.forName(“驱动全路径类名”)加载驱动,然后通过驱动类的静态代码段实现该驱动向DriverManage的注册。注册方法就是调用DriverManager的registerDriver类。本系统的注册方式如下:
DriverManager.registerDriver(new jmi.database.ABCServerDriver());
Driver接口需要实现的方法主要有acceptsURL和connect方法。acceptsURL方法用来该驱动匹配的url地址,ABC数据库管理系统定义的URL协议如下:
jdbc:abc://
Connect方法建立客户端程序和数据库服务之间的连接,DrvierManager. getConnection通过url地址调用对应驱动Driver类的connection完成客户端与服务器之间的连接。ABC数据库驱动通过Socket网络协议建立了客户端与数据库服务之间的一条通道,通过Socket将客户端的命令发送给服务器端,将服务器的结果返回给客户端。
4.1 海量数据排序
在大数据导入和未建索引的列上进行排序操作的时候,由于海量数据无法一次性加载到内存中进行排序,只能借助硬盘完成排序操作。排序采用的是一种“排序—归并”的策略。在排序阶段,先读入能放在内存中的数据,将其排序后输出到一个临时文件,依次进行,将待排序数据组织为多个有序的临时文件,而后在归并阶段将这些临时文件组合为一个大的有序文件,即为排序结果。
4.2 SQL语法验证
通过正则表达式完成SQL语句的验证和内容的提取。正则表达式描述了一种字符串匹配的模式,可以用来验证某个字符串是否符合某种模式,也可以将模式匹配的子串提取出来[4]。
4.3 数据压缩技术
为了加快客户端与服务器端海量数据的传递,提高数据上传效率,采用了分块压缩算法,客户端采用RandomAccessFile类并发读入海量数据文件,然后分块压缩传递给服务器端,服务器根据标记解压缩数据,然后将数据存储到服务器中。压缩使用基于并行的Gzip压缩算法,性能上得到极大的提升[5]。
4.4 索引的建立
由于数据是存储在硬盘上,而I/O操作是非常耗时的。对于海量数据而言,索引也是非常大的,也不可一次加载到内存中。为了减少I/O操作,本文选自了B+树来实现索引,根据局部性原理和磁盘预读的特点,提高了查找的效率[6]。
在计算机应用专业教学工作中,有些内容仅仅通过理论的讲解无法让学生深入地掌握。而通过一些简易的模拟软件可以使学生更容易掌握相关的知识,基于此开发了数据库模拟系统ABC Server。该系统是一个简化版本的数据库管理系统,融入了数据结构、网络编程、数据库原理、SQL、多线程、Java编程等知识和技术。
模拟数据库系统在数据库原理和技术、Java编程、计算机网络等课程教学中的应用使得学生更容易掌握相关的技术,提高了教学质量和效果。但在教学的过程中也发现了一些问题,如查询优化是数据库技术中重要的方面,但是当前的版本并不支持,还有编程规范性欠缺,不利于养成学生好的编程习惯。在后续的版本中将进一步完善这些不足,同时融入大数据、移动数据库等新的理念,使其能更好地服务于计算机应用专业的教学工作。
[1] 马德云. 斯坦福大学《编程方法》公开课介绍[J]. 课程教育研究(新教师教学), 2015(25):20-21.
[2] 刘珊珊. Minix操作系统的分析、改进与测评[D]. 成都:电子科技大学, 2009:11-13.
[3] 夏潇, 钟毅. 一种增强型结果集访问关系数据库组件性能的评估[J]. 科技通报, 2014(11):75-80.
[4] 高爱英, 王红剑. 利用正则表达式实现索引自动排序[J]. 中国科技期刊研究, 2014(2):222-224.
[5] 宋刚, 蒋孟奇, 张云泉,等. 基于共享存储和Gzip的并行压缩算法研究[J]. 计算机工程与设计, 2009(4):781-784.
[6] 耿庆田, 狄婧, 常亮,等. 基于B+树的数据索引存储[J]. 吉林大学学报:理学版, 2013(6):1133-1136.
[责任编辑:李娟]
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
第二届江苏省高校中青年骨干教师和校长境外研修项目;江苏海事职业技术千帆团队建设项目(201507)
吕太之(1979-),男,讲师、高级工程师,主要研究方向:计算机应用、职业教育
TP 311.13
A
1672-2434(2016)05-0016-03