# MiniSQL **Repository Path**: Lumos-az/mini-sql ## Basic Information - **Project Name**: MiniSQL - **Description**: ZJU DBS Course Project -- MiniSQL - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 0 - **Created**: 2021-06-06 - **Last Updated**: 2025-09-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MiniSQL ## 体系结构 [![2GpwVI.png](https://z3.ax1x.com/2021/06/04/2GpwVI.png)](https://imgtu.com/i/2GpwVI) ## 模块概述 #### Interpreter Interpreter模块直接与用户交互,主要实现以下功能: 1. 程序流程控制,即“启动并初始化 -> '接收命令、处理命令、显示命令结果'循环 -> 退出”流程。 2. 接收并解释用户输入的命令,生成命令的内部数据结构表示,同时检查命令的语法正确性和语义正确性,对正确的命令调用API层提供的函数执行并显示执行结果,对不正确的命令显示错误信息。 #### API API模块是整个系统的核心,其主要功能为提供执行SQL语句的接口,供Interpreter层调用。该接口以Interpreter层解释生成的命令内部表示为输入,根据Catalog Manager提供的信息确定执行规则,并调用Record Manager、Index Manager和Catalog Manager提供的相应接口进行执行,最后返回执行结果给Interpreter模块。 #### Catalog Manager Catalog Manager负责管理数据库的所有模式信息,包括: 1. 数据库中所有表的定义信息,包括表的名称、表中字段(列)数、主键、定义在该表上的索引。 2. 表中每个字段的定义信息,包括字段类型、是否唯一等。 3. 数据库中所有索引的定义,包括所属表、索引建立在那个字段上等。 Catalog Manager还必需提供访问及操作上述信息的接口,供Interpreter和API模块使用。 #### Record Manager Record Manager负责管理记录表中数据的数据文件。主要功能为实现数据文件的创建与删除(由表的定义与删除引起)、记录的插入、删除与查找操作,并对外提供相应的接口。其中记录的查找操作要求能够支持不带条件的查找和带一个条件的查找(包括等值查找、不等值查找和区间查找)。 数据文件由一个或多个数据块组成,块大小应与缓冲区块大小相同。一个块中包含一条至多条记录,为简单起见,只要求支持定长记录的存储,且不要求支持记录的跨块存储。 #### Index Manager Index Manager负责B+树索引的实现,实现B+树的创建和删除(由索引的定义与删除引起)、等值查找、插入键值、删除键值等操作,并对外提供相应的接口。 B+树中节点大小应与缓冲区的块大小相同,B+树的叉数由节点大小与索引键大小计算得到。 #### Buffer Manager Buffer Manager负责缓冲区的管理,主要功能有: 1. 根据需要,读取指定的数据到系统缓冲区或将缓冲区中的数据写出到文件 2. 实现缓冲区的替换算法,当缓冲区满时选择合适的页进行替换 3. 记录缓冲区中各页的状态,如是否被修改过等 4. 提供缓冲区页的pin功能,及锁定缓冲区的页,不允许替换出去 为提高磁盘I/O操作的效率,缓冲区与文件系统交互的单位是块,块的大小应为文件系统与磁盘交互单位的整数倍,一般可定为4KB或8KB。 #### DB Files DB Files指构成数据库的所有数据文件,主要由记录数据文件、索引数据文件和Catalog数据文件组成。