镜像网站是怎么做的,wordpress 内容可以是表格吗,wordpress.安装,seo包年优化费用toadb updated by 2023/11/15 专栏内容#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发#xff0c;开发的步骤#xff0c;以及开发过程中的涉及的原理#xff0c;遇到的问题等#xff0c;让大家能跟上并且可以一起开发#xff0c;让每个需要的人成为参与者。 …toadb updated by 2023/11/15 专栏内容 手写数据库toadb 本专栏主要介绍如何从零开发开发的步骤以及开发过程中的涉及的原理遇到的问题等让大家能跟上并且可以一起开发让每个需要的人成为参与者。 本专栏会定期更新对应的代码也会定期更新每个阶段的代码会打上tag方便阶段学习。 开源贡献 toadb开源库 个人主页我的主页 管理社区开源数据库 座右铭天行健君子以自强不息地势坤君子以厚德载物. 文章目录 toadb updated by 2023/11/15概述更新内容举例说明支持情况结尾 概述
主要更新了解析树增加了查询树和执行计划树的生成这有利于带条件SQL和复杂SQL处理同时节点化各个关系代数运算后有利于执行计划优化的实现。与此同时更新了执行器可以通过输入的计划树来执行不再像以前通过SQL解析结果。
更新内容
下面将分别描述更新的内容
解析树 在词法分析、语法分析的过程中会生成解析树将用不同节点来表示各子句及存储它们传递的信息这样有助于后续步骤的开展。在开发解析树时尽可能与存储模型数据库类型无关希望做成一个通用的SQL解析器它的输入就是SQL字符输出就是解析树不像现在每种类型的数据都有一个解析器。真正与数据库存储模型相关的是在下一步骤也就是查询树。 查询树 查询树也叫做逻辑执行计划它的主要是把SQL用关系代数进行表达不同关系代数用不同节点表示树的层次来表示节点之间的关系。当然在转换的过程中会对SQL中的数据进行检查比如表是否存在表的元数据是否一致等同时还会对一些SQL子句进行展开和替换比如对sellect *, 将它的结果目标列替换为所有的属性列这就是常说的重写的过程。当然在真实数据库中重写阶段还会对视图规则等进行处理。 计划树 计划树也叫执行计划或者叫做物理执行计划树它是一个树状结构每个节点的类型对应着真正要执行的动作。当然未来会在生成计划树之前可以再增加一个优化器对各种可能的SQL子句进行重新整理提升子句逻辑检查等这将大大提升执行的效率。 执行器 之前只对简单的SQL执行全表查询更新后通过输入的物理执行计划只需要递归的遍历执行计划的节点按对应节点的类型执行相应动作即可然后返回target对应的元组更新后执行器更加通用更加灵活。 未来增加索引优化节点执行动作增加节点执行接口这些将变成局部修改。 内存管理 之前对于动态内存申请并没有进行释放管理本次增加了一个简单的内存管理实现一种内存上下文的机制在上下文使用完成后会统一释放之前上下文中申请的内存。在程序退出时会释放所有申请的内存。同时为了方便调式对于动态申请的内存标定了内存的起始和结尾这样可以方便探测到内存越界的情况。 这是一个公共组件目前只是简单实现后期与数据库的缓存管理一起进行模块级实现。 举例说明
下面举几个例子说明一下变化情况。
insert 语句 比如insert into tablename(...) values(...),(...); ,这条插入语句。 之前是通过遍历values子句循环执行执行表的动作。 更新之后values子句转换为一个虚似的表在执行计划中会有一个表扫描的节点将返回的元组再执行一个ModifyTable动作。这样就是一个通用的操作未来很方便的支持insert into ... select ...这种形式或者更复杂的形式。 select 语句 如上所述之前只有一个表的全表扫描。现在对于表扫描实现一种迭代器的扫描方式每次可以返回下一个扫描到的元组。对于多表和带条件表达式时增加控制节点比如两个表的连接会增加嵌套循环节点先从外表中拿到一个元组再从内表中依次扫描元组如果两表都有元组则输出结果当内表遍历完时从外表再扫描下一个元组再从头遍历内表。
目前只有顺序扫描和嵌套循环两种实现路径。
支持情况
目前toadb支持的SQL语法有
DDL create table tableName(columnName type,...); drop table tableName; 创建表和删除表的SQL支持 DML insert into tablename(...) values(...),(...); 向表中插入数据可以是一个values也可以带多组值 DQL select columName,.. from tableName,.. where qual and qual or qual; 可以查询单个或多个表带有条件(目前需要带一个条件)目前对条件并没有处理只是简单的返回全表。当查询为多表时会以积的形式返回结果也就是两边非空的所有列。 结尾 非常感谢大家的支持在浏览的同时别忘了留下您宝贵的评论如果觉得值得鼓励请点赞收藏我会更加努力 作者邮箱studysenllang.onaliyun.com 如有错误或者疏漏欢迎指出互相学习。