西电数据库实验三:XDSQL数据库优化

简介: 姓名:贾瑞学号:21009201172

姓名:贾瑞
学号:21009201172
实验3 XDSQL数据库优化
3.1实验环境
云主机 2C4G
操作系统 windows server 2016
3.2实验目的
在DBMS原型数据库开发中,select语句功能实现是较为复杂的,涉及到单表查询、多表查询、条件查询和嵌套查询等功能的实现。在以往大三下学期课程编译原理的作业——实现一个简易的DBMS数据库系统中,大多数学生只实现了单表查询和条件查询,多表查询只支持两张表的连接查询。为了提高学生动手能力,加深学生对笛卡尔积和多表查询的理解,本次实验在XDSQL数据库源代码的基础上,提供给学生一款只支持两张表连接查询的数据库系统XDSQL_for_select和其源代码,由学生将其改为支持多表查询的数据库系统。
3.3实验内容
XDSQL_for_select数据库系统是对XDSQL数据库修改得到的,其只支持以下SQL语句:

该数据库不支持创建数据库、删除数据库、创建表、删除表、插入、删除、更新等操作,目前只支持单表查询和双表查询,不支持条件查询和嵌套查询。
在XDSQL_for_select源代码中,负责查询的代码位于XDSQL_for_select/QueryProcessor.cpp中select函数内,其功能流程图如下:

当执行多表查询时,程序首先对待查询的多张表进行笛卡尔积操作,将结果保存到临时表中,随后基于临时表进行查询操作,最后删除临时表。生成临时表的函数名为generateTempTable,其中调用 tablejoin函数用于多张表的笛卡尔积操作,并将结果存入临时表。目前tablejoin只支持两张表笛卡尔积操作。本次实验的目的便是修改tablejoin函数,使其支持多张表笛卡尔积操作。
涉及到的结构体说明:
tableNode结构体:具体定义见MetadataManager.h文件,记录数据表的元数据信息,包括表名、表内列数、一行数据的大小(单位:字节)和指向下一个tableNode结构体的指针。
storageNode结构体:具体定义见StorageEngine.h文件,可以将其视为指向数据表内数据行的指针。涉及到的函数说明:

负责对多张表进行笛卡尔积操作,并将结果通过sp写入临时表中。其传入参数如下:
tablenode:数据表节点,记录待查询数据表基本信息。
row:字节数组,作为临时数据行,负责笛卡尔积过程中数据的暂时存储。
index:字节数组指针,负责记录下一张表数据行数据在row字节数组中存储的首地址。 sp:临时数据表的数据行指针。

打开tablename数据表,并用sp指向该数据表内的数据行。其中tablename为数据表名称,rowlength为数据表内一行数据所占字节数。

初始化sp指针,使其指向数据表第一行数据。

判断数据表是否读取完毕,完毕返回true,否则返回false。

读取sp指向的数据行数据,随后令sp指向下一行数据。返回值如果为NULL,说明该行数据已被删除,不对数据进行任何操作。

向sp指向的数据表表尾写入一行数据。row字节数组记录待写入的数据行数据。
tablejoin函数功能如下图所示:

其中first_table和second_table为待查询的表,temptable为临时表,是待查询表笛卡尔积后的结果表。下图展示了临时表第一行数据生成过程:

现需要同学们对tablejoin函数进行修改,使该函数具有多张表笛卡尔积功能,使newSQLdemo数据库支持多表查询。

3.4实验步骤
 申请云主机,点击创建资源,获得ECS公网IP,登录名和密码
 打开开始菜单,搜索远程桌面连接并运行,依次填写连接信息
 点击连接,登录到ECS服务器。第一次连接可能会出现连接失败,等待一两分钟后再次连接即可登录
 将Git-2.31.1-64-bit.exe复制到云主机
 安装git,安装步骤直接Next即可
 运行cmd,输入以下指令,将XDSQL_for_select数据库源代码下载到云主机
 将VS2019复制到云主机,安装。安装时只安装使用C++的桌面开发即可,时间大约20分钟。
 打开VS2019,点击右上角的文件->打开->项目,打开XDSQL_for_select项目
 打开QueryProcessor.cpp文件,对tablejoin函数进行修改,使其支持多表连接

 修改完毕后,将select函数中待查询表数量大于2的判断条件注释或删除,如下所示

 点击运行,依次输入以下指令进行测试:
 显示以下结果,说明测试成功

相关文章
|
19天前
|
存储 人工智能 NoSQL
AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
|
4月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
166 1
|
25天前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
102 6
|
1月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
366 4
|
3月前
|
机器学习/深度学习 SQL 运维
数据库出问题还靠猜?教你一招用机器学习优化运维,稳得一批!
数据库出问题还靠猜?教你一招用机器学习优化运维,稳得一批!
119 4
|
7月前
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
8月前
|
关系型数据库 数据库 数据安全/隐私保护
云数据库实战:基于阿里云RDS的Python应用开发与优化
在互联网时代,数据驱动的应用已成为企业竞争力的核心。阿里云RDS为开发者提供稳定高效的数据库托管服务,支持多种数据库引擎,具备自动化管理、高可用性和弹性扩展等优势。本文通过Python应用案例,从零开始搭建基于阿里云RDS的数据库应用,详细演示连接、CRUD操作及性能优化与安全管理实践,帮助读者快速上手并提升应用性能。
|
9月前
|
缓存 NoSQL JavaScript
Vue.js应用结合Redis数据库:实践与优化
将Vue.js应用与Redis结合,可以实现高效的数据管理和快速响应的用户体验。通过合理的实践步骤和优化策略,可以充分发挥两者的优势,提高应用的性能和可靠性。希望本文能为您在实际开发中提供有价值的参考。
205 11
|
9月前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
1500 1