# 基于C++实现的迷你数据库
# 1 引言
## 1.1 目的
为了深入学习和了解数据库以及小学期课程需要,我们小组决定自己编写一个简单的mini-database。
## 1.2 背景
1970年,IBM的研究员,有“关系数据库之父”之称的埃德加•弗兰克•科德(Edgar Frank Codd或E. F. Codd)博士在刊物《Communication of the ACM》上发表了题为“A Relational Model of Data for Large Shared Data banks(大型共享数据库的关系模型)”的论文,文中首次提出了数据库的关系模型的概念,奠定了关系模型的理论基础。20世纪70年代末,关系方法的理论研究和软件系统的研制均取得了很大成果,IBM公司的San Jose实验室在IBM370系列机上研制的关系数据库实验系统System R历时6年获得成功。1981年IBM公司又宣布了具有System R全部特征的新的数据库产品SQL/DS问世。由于关系模型简单明了、具有坚实的数学理论基础,所以一经推出就受到了学术界和产业界的高度重视和广泛响应,并很快成为数据库市场的主流。20世纪80年代以来,计算机厂商推出的数据库管理系统几乎都支持关系模型,数据库领域当前的研究工作大都以关系模型为基础。
本项目的主要命令都参考mysql完成。MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
## 1.3 术语
| 序号 | 术语/缩略语 | 说明 |
| ---- | -------------------- | ------------------------ |
| 1 | B+tree | B+树 |
| 2 | SGA | System Global Area 系统全局区 |
| 3 | shared pool | 共享池 |
| 4 | data buffer area | 数据缓冲区 |
| 5 | redo log buffer | 日志缓冲区 |
| 6 | library cache | 库缓存区 |
| 7 | data directory cache | 数据字典缓存区 |
| 8 | SMON | System Monitor |
| 9 | DBWR | Data Base Writer |
| 10 | LGWR | Log Writer |
| 11 | CKPT | Check point |
# 2 软件基本结构
软件由实例和数据库组成:
数据库由数据文件(包含表头文件、纪录文件、索引等数据)、控制文件(包括每个表的操作信息)、日志文件(数据操作sql语句)、参数文件(分配内存区域并定位控制文件的位置)、口令文件、日志归档文件(归档模式下)(服务器崩溃、硬盘损坏情况下,通过日志恢复时用)
实例由内存结构(memory strutct) 和后台进程(background processor)组成。
SGA: System Global Area 系统全局区,主要是给实例使用,包括共享池(shared pool 、数据缓冲区( data buffer area) ,日志缓冲区( redo log buffer)。
## 2.1 共享池(shared pool)
包括library cache 、data directory cache 组成,其中 library cache 主要保存最近的sql 检查、编译、执行计划, 下次有同样语句过来的时候,可以重用这些,避免重复的检查编译执行计划。 data directory cache 主要保存数据库数据表的字段定义、索引数据等, shared pool 的大小直接影响到数据库的性能。
**data buffer area** : 主要保存用户对数据的修改,查询操作。该内存区域的大小直接影响数据库的性能
**redo log buffer area**: 主要保存最近用户对数据库的操作记录,该大小对数据库性能没有多大影响
- SMON(System Monitor)监控SGA的健康情况,收集SGA碎片内存,监控实例健康情况
- DBWR(Data Base Writer)维护data buffer area 和物理表数据的一致性
- LGWR(Log Writer)维护redo log buffer area 内存数据和日志文件的一致性
- CKPT(Check point)设置检查点,在oracle 实例出现问题的时候,可以恢复到实例失败前的情况
![](http://www.writebug.com/myres/static/uploads/2021/10/19/4f19910e80e449b437cdab1ae14ff506.writebug)
# 3 系统模块划分与设计
## 3.1 词法分析模块
主要是处理用户的输入,将用户的输入转换成程序可执行的语句。它拟提供以下功能:程序使用简要说明,对用户输入进行词法分析并提取参数及关键字,对于错误输入报错并提示正确的输入格式,将用户输入的信息备份在日志中。
| Analysis() | 从输入流中取出主要命令,调用各命令对参数的分析 |
| ---------------- | ------------------------ |
| CommandHelp() | 当输入出现错误时对用户提供帮助 |
| Use() | 提供USE命令的句法分析 |
| Back() | 提供BACK命令的句法分析 |
| CreateDataBase() | 提供CREATE DATABASE命令的句法分析 |
| CreateTable() | 提供CREATE TABLE命令的句法分析 |
| Inster() | 提供INSTER命令的句法分析 |
| Update() | 提供UPDATE命令的句法分析 |
| Delete() | 提供DELETE命令的句法分析 |
| Select() | 提供SELECT命令的句法分析 |
| Add() | 提供ADD命令的句法分析 |
| Save() | 提供SAVE命令的句法分析 |
## 3.2 核心处理模块:
对已从磁盘加载进内存中的数据进行处理,并利用索引实现增删改查等功能,将结果显示在控制台上。
| CoreProcessing() | 创建日志文件并且写入 | |
| ----------------- | -------------- | ----------------- |
| Analysis () | 判断命令内容调用相关处理函数 | string& cmd传入命令指针 |
| UseDataBase () | 进入文件夹(使用数据库) | string,传入数据库名称 |
| CreateDataBase () | 创建数据库(即创建文件夹) | string,传入文件夹名称 |
| ReadLog () | 读取日志内容 | string文件夹名称 |
## 3.3 文件处理模块
将内存与磁盘数据同步(日志、表单读取、新建库或表单)。
| ChangePath () | 根据输入参数提取出文件路径 | |
| --------------- | ------------- | ------------------- |
| CreateFolder () | 创建文件夹(即库) | string传入文件路径 |
| DeleteFolde() | 删除文件夹 | string传入文件路径 |
| Rename() | 更改名称 | string原名称,string现名称 |
| WriteTxt() | 将记录写入txt文件中 | string表名,vector记录内容 |
| ReadTxt() | 从txt中读出记录 | string表名,vector记录内容 |
## 3.4 table记录处理相关操作
| Table() | 将记录数和关键词数初始化为0 | |
| ------------- | -------------- | -------------------- |
| CreateTable() | 创建表单时将表头的内容写入 | vector表头内容 |
| Insert() | 将记录写入表单 | vector,传入记录内容 |
| Update () | 更新记录内容 | vector,需要更新条目的条件及新内容 |
| Delete () | 删除记录内容 | vector,需要删除�
shejizuopin
- 粉丝: 1w+
- 资源: 1300
最新资源
- IP网络的仿真及实验.doc
- Metropolis-Hastings算法和吉布斯采样(Gibbs sampling)算法Python代码实现
- 高效排序算法:快速排序Java与Python实现详解
- 基于stm32风速风向测量仪V2.0
- 多边形框架物体检测27-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 国产文本编辑器:EverEdit用户手册 1.1.0
- 3.0(1).docx
- 多种土地使用类型图像分类数据集【已标注,约30,000张数据】
- 智慧校园数字孪生,三维可视化
- GigaDevice.GD32F4xx-DFP.2.1.0 器件安装包
- 基于 Spring Cloud 的一个分布式系统套件的整合 具备 JeeSite4 单机版的所有功能,统一身份认证,统一基础数据管理,弱化微服务开发难度
- opcclient源码OPC客户端 DA客户端源码(c#开发) C#开发,源码,可二次开发 本项目为VS2010开发,可转为VS其他版本的编辑器打开项目 已应用到多个行业的几百个应用现场,长时间运
- IMG_4525.jpg
- STM32F427+rtthread下的bootload 网口(webclient)+串口(ymodem)传输,代码无质量,谨慎使用
- FastAdmin后台框架开源且可以免费商用,一键生成CRUD, 一款基于ThinkPHP和Bootstrap的极速后台开发框架,基于Auth验证的权限管理系统,一键生成 CRUD,自动生成控制器等
- GD32F5XX系列的产品数据手册,学习手册,器件安装包
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈