数据库是个非常复杂的系统,主要由以下几个部分组成:
存储
索引
查询执行
查询编译
日志
并发控制
事物
锁
存储分为主存储和辅助存储器,辅助存储器通常为磁盘。数据必须在主存储器中,才能对数据进行操作。存储管理器的主要任务是控制数据在磁盘上放的位置和在磁盘跟主存之间移动,这块内容主要在第二章。
数据:数据库自身的内容
元数据:描述数据库结构及其约束的数据库模式
日志系统:关于最近对数据库所做改变的信息,这些信息支持数据的持久性(第六章)
统计信息:DBMS收集和存储的关于数据库中各个关系或者其他成分的大小、取值等信息
索引:支持对数据进行高效的存取的数据结构(这部分在第三章)。
数据有了,就需要对数据进行查询,查询处理器主要分为几个步骤:
查询编译器(第五章),将查询内容翻译为一种内部形式,称作查询计划,而查询计划是可以在数据上执行的一系列动作。通常查询计划是的操作是“关系代数”的实现,主要有包括以下三种:
查询分析器,将SQL通过flex & bison 解析为一个query tree.
查询预处理,对查询语句进行语义检查,并对关系进行转换获得一个最初的代数操作数(RBO)。
查询优化器,将最初的查询计划转换为对于实际数据最有效的操作序列(CBO)。
执行引擎(第四章),负责执行选中的查询计划中的每一步,执行引擎与DBMS中大多数的其他成分都有交互,或直接交互,或通过缓存区。为对数据进行操作,必须把数据取到缓存区中。需要和调度器进行交互,并且需要加锁(第七&八章),它需要和日志系统交互,确保所有的修改都正确的记了日志(第六章)。
图截取书p4
后面的章节和内容都完全围绕这个图来进行,部分内容我会自己用代码进行实现,语言暂定为C
领取专属 10元无门槛券
私享最新 技术干货