数据库系统实现之一:数据库实现概论
2010-10-07 20:19 心中无码 阅读(1871) 评论(10) 编辑 收藏 举报数据库系统实现之一:数据库实现概论
最近想系统的学习DBMS实现方面的知识,并记录学到的一点一滴,于是准备在博客园上发表一系列这方面的知识,主要是根据《数据库实现》这本书,把自己的理解进行总结,希望各位园友不吝赐教,小弟感激不尽。
王珊老师有云:数据库就是数据的仓库。数据库管理系统就是对数据仓库进行管理。数据库的基本功能就是为了方便用户对数据的存取和操作。普通的文件也可以存储数据,但是不方便对数据进行统一管理。下面从整体上介绍下DBMS应该具有哪些模块。
一个DBMS首先应该有自己的内存管理模块,如果频繁的和操作系统进行空间的申请和释放,会严重影响一个DBMS的性能,据说QQ也是自己进行管理的。其次需要存储管理,如插入记录或者查询记录,最终都要反映到文件上,再底层就是磁盘上,OS的文件系统已经封装了对磁盘的操作,DBMS又不能仅仅按照OS的文件系统进行存储管理,DBMS应该在OS之上,对存储进行更进一步的管理,记录当然可以在文件中顺序存储,但一般DBMS都是按照B树的方式进行存储,这样对定位数据十分有利。频繁的和磁盘进行交互,严重影响DBMS的性能,于是缓冲区管理模块是必须滴。上面就是几个比较底层的模块:内存管理,存储管理,缓冲区管理。
用户通过SQL语句进行数据库的管理和操作,SQL语句又分为DDL和DML。所以需要DDL和DML编译器,对SQL语句进行语法分析,并生成执行计划,最后将执行计划送到执行引擎,执行执行计划。DML是SQL中使用最多的语句,SELECT又是DML中使用最多的语句,查询一般是将SELECT语句转化为内部语法树,然后查询优化器根据规则将语法树转化为有效的等价的形式,最后生成执行计划,下面举例说明(http://www.xinx.sdnu.edu.cn/sfzx/jpsykc/wh/wh04.html):
1 2 3 4 | SELECT Student.Sname FROM Student, SC WHERE Student.Sno=SC.Sno AND SC.Cno= '2' ; |
这条含有JOIN的SELECT语句首先转化为内部的语法树,形式如下:
语法树然后转化为关系代数语法树,形式如下:
通过查询优化器,对查询进行优化,这里用到了关系代数的优化,后面再讲。可以将SC.CNO='2'的选择操作符降到低层,如下所示:
有时需要一系列操作作为一个整体的单位进行执行,事务的概念便被提出来了,如银行转帐操作就是一个事务。事务具有ACID的性质,为了保证事务的这些特性,需要日志和恢复系统,当DBMS遇到故障时,可以根据日志做一些REDO和UNDO操作,保证事务的原子性和持久性。同时事务之间可能有并发现象,并发可能导致脏读,不可重复读,幻读,导致这些的原因是对公共资源的操作存在交叉,于是需要对资源进行上锁,锁机制也是事务的一个模块。
一个基本的DBMS应该具有上述的几个模块,当然还有一些高级的模块,如数据库备份,权限管理等。
最后给出书中的一个模块划分图。
初次发帖,欢迎板砖!下节开始介绍存储模块。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述