数据库系统实现概要

来源:互联网 发布:英国留学真实生活 知乎 编辑:程序博客网 时间:2024/06/09 14:19

数据库系统实现需要很多的功能模块,当然这些模块的划分肯定是不定的,我相信每个数据库的模块划分也是不一样的,但是很清楚的,那就是模块之间定是遵循软件工程的原则的,比如高内聚性和低耦合性。当然我并不熟悉现有数据库系统比如Mysql、Oracle、DB2等的内核和功能,我只能就现有的资料,比如斯坦福大学的数据库系统原理,以及国内外的大学开设的该课程课件,和已经完成一个小型数据库来对新的数据库系统架构做出一些整理,当然,问题肯定还是有的,不过这也是为什么要做这件事情的一个缘由。

根据资料,以及个人的一些经验,下面就来说说可能要设计的模块,当然这里说模块可能不是很准确,总之,这些问题是需要在后面的实现中进行探讨的,也是有必要放在桌面上来说说的,:

(1)connectors(连接器)。是一个负责不同编程语言与数据库系统进行交互的一个工具,如JDBC、ODBC、PHP等。在之前实现的一个数据库系统中,本人主要负责了数据库的外部接口,当时已PHP为例,进行了定量的开发,实现了一个PHP模块,通过模块的加载,可以实现了系统的增删改查功能。后期做了Java的接口,但是Java的接口JDBC是要符合一定的标准,而这个标准规范不太容易找到,还有就是工作量也比较大,然后就放弃了。其原理也很简单,就是通过SOCKET进行连接数据库系统端口,向端口进行发送数据命令,然后数据库系统返回结果给客户端。就像不管黑人白人(客户端),都来对你(服务器)进行提问:“你叫什么名字”(命令),然后你回答:“XXX”(结果)。

(2)connection pool(连接池)。 说白了也就是缓冲机制,缓冲客户端的访问,当客户端对服务器进行大量访问连接的时候,对SOCKET连接进行有效的管理和及时的响应。这里要提醒的就是里面会有一个thread pool(线程池)来支持大量的并发的访问和响应。当然,这里可以增加一些安全验证、网络数据加密、连接限制等前端功能。

(3)parser(解析器)。这个主要是利用编译的原理,对SQL语句进行解析。分析出sql interface(接口),语句是否正确,表、字段是否正确等等,最终是解析出一棵对应的语法树,如trie树。

(4)optimizer(查询优化器)。如果看过数据库系统原理的东西的话,会知道,在数据库系统中,查询优化是很大的一部分重点,没有优化的查询和优化过的查询是有着天壤之别的查询速度。当然这块知识,我目前还不是很了解,在以后如果设计到的时候,我会再次进行解释。在实现查询中,我也会尽量去实现这样的一个优化原则。

(5)execution engine(执行引擎)。这个模块是数据库中较重要的模块,有大量的数据库相关论文也都集中在这里进行讨论。这部分也是最复杂的一块内容。A、涉及到日志;B、涉及到事务;C、涉及到索引(一维和多维);D、涉及到并发控制;E、涉及到缓存管理。

A、Logging。记录每一个操作,并根据记录来redo\undo。

B、Transcation。根据ACID,以及日志来保证数据库的正确。

C、Index。根据索引字段(当然一维的情况比较好),创建索引、修改索引,如B-树、hash、k-d 树、R 树等。

D、Concurrency control。这里是为了保障事务的一致性。难点就是对lock的管理,初步设计这里对page来进行上锁。

E、Buffer manager。实现文件的缓存机制,从而取代系统的缓存机制,主要针对数据文件和索引文件,当然文件缓冲机制有很多,如LRU、CLOCL等。

(6)storage engine(存储引擎)。这个模块是mysql中具有特色的一个内容。主要负责和文件的交互工作。我认为呢,这块可以取消掉,在我自己的这个小型的数据库中,这个引擎可以简单的看成是一个读写文件的模块,当然文件是自己的,文件结构就得自己架构。在存储里,需要注意的就是数据,直接异步写磁盘,不经过系统的缓存,也就是所说的DIO。这个是很重要的,当然,除了数据文件外,其他的文件还是可以利用系统文件缓存机制进行读写的。


下面是一张数据库系统实现一书中的数据库管理系统成分图,大家可以根据这张图来大概的了解下数据库系统的成分,以及每一块的功能,从而对数据库系统更好的了解,如图所示:



到此,我想应该把后面设计实现可能用到的内容都摆出来了,当然没有摆出来的那就先放着,后面我会追加到本文中。至此,大概把一个简单的数据库系统所可能设计到的模块都进行了一下解释和说明。思来想去,如果都做,现在恐怕有点力不从心啊,毕竟一个人的力量是有限的,当然,我欢迎大家有兴趣的可以一块来进行探讨,或者给出一些你所详实的建议,如果你能帮我来完成某个模块的建设,我定是相当的感激。

目前,我计划是做一个嵌入式的数据库系统,在各个方面也都会遵循简单实用的原则,除此之外,我会尽量让每一个模块进行分开,文档会尽量详尽,给以后研究数据库具体相关内容的大家,提供一个平台。希望以后大家可以有自己的嵌入式数据库,加载到手机里,加载到导航仪里,加载到家电里等等。也许多想了,不过也是一份心。


原创粉丝点击