简易数据库管理系统(DBMS)设计与实现
⼀、概要
1.1 数据库管理系统/数据库
下图展⽰了DBMS(数据库管理系统)的地位,数据库(系统)其实包含了DBMS和数据两部分。
1.2 架构设计
1.3 设计思路
1. 数据仓库:使⽤XML(可拓展标记语⾔)⽂件作为微型数据仓库,对XML⽂件的读写操作相当于对数据的读写操作;
2. SQL解析: 使⽤正则表达式解析SQL语句;
3. 索引:设计索引结构,使⽤B+树算法;
实现1、2两步,基本上就能完成⼀个简陋的数据库管理系统了,因为可以使⽤SQL语句对存储在XML⽂件的数据进⾏增删改查(CRUD)操作。
1.4 规划
编程语⾔:Java
1. v1.0版本:⽀持简单、单句SQL解析、以XML⽂件作为微型数据仓库,在控制台启动和操作
2. v2.0版本:增加索引
⼆、细节
2.1 XML⽂件作为数据仓库
1)逻辑上的⼀张表在物理上是⼀个⽂件夹,⾥⾯包含多个XML⽂件
2)⼀个XML⽂件作为⼀张物理⼦表(如上图所⽰),多个物理⼦表构成⼀张逻辑表
3)每张表都有⼀个配置⽂件,⽤来存储数据类型、物理⼦表数量、是否建有索引等信息
4)所有对数据表的操作都是基于DOM4j解析对XML的读写操作
2.2 正则表达式解析SQL语句
1)SQL语句预处理(去重多余空格、统⼀转化为⼩写等)
2)正则匹配关键字(如select xx from xx 等)
3)根据SQL语句关键字和关键字后的内容,调⽤相应的⽅法
2.3 B+树索引结构
1)B+树的key存的要索引的字段,value存索引字段对应的逻辑⼦表名称
2)在查询时,根据key对应的value(即逻辑⼦表名称)直接打开对应的XML⽂件,然后遍历其中的数
据到符合条件的记录(由于每张物理⼦表/XML⽂件设计的容量较⼩,因此遍历的时间较短,但缺点是物理⼦表/XML⽂件过多)
3) 每张表索引建⽴后,会把索引持久化到磁盘上(XML⽂件⾥),每次启动系统都会加载索引⽂件到内存中的数据结构中
三、总结
实现的是⾮常简单的⼀种DBMS,在控制台启动,可以实现⼀些基础的SQL语句增删改查,对字段建⽴索引后可⼤幅提⾼查询效率。
缺点及改进如下:
1. 由于SQL解析使⽤的正则表达式,因此对于复杂的SQL语句(多句复合、嵌套等)处理起来⾮常⿇烦,因此没有继续拓展。改进思路
使用dom4j解析xml文件
是SQL解析部分使⽤词法和语法分析器,可以实现更多、更复杂的SQL语句解析;
2. 由于数据仓库使⽤的是XML⽂件,⽽索引设计在XML⽂件名上,因此在数据安全、存取效率上都很低。改进思路是⾃定义⽂件格式并
编写处理代码,数据使⽤⼆进制格式(并加密)存储,⽽索引部分可将B+树持久化到磁盘上(MySQL InnoDB B+树的叶⼦节点存的就是磁盘上的数据);
3. 可以考虑做成前后端分离的系统,这样可以将系统部署在服务器上,然后通过浏览器端访问进⾏增删改查;
4. 考虑到并发安全,可以对整张表进⾏加锁(代价最低,实现最简单,⽤⼀个字段/变量指⽰是否加锁即可),如果学习了MySQL之后
的话,可以只到对⼀⾏记录进⾏加锁或使⽤MVCC进⾏⽆锁控制。
源码
只是简单的实现,还没有往改进的⽅向上去做。