首页
学习
活动
专区
工具
TVP
发布

Coding迪斯尼

专栏成员
322
文章
283540
阅读量
97
订阅数
自己动手做数据库系统:解释执行 update 和 delete 对应的 sql 语句
在上一节我们完成了 select 语句的解释执行,本节我们看看 Update 和 Delete 对应的语句如何解释执行,当然他们的实现原理跟我们前面实现的 select 语句执行大同小异。无论是 update还是 delete 都是对数据表的修改,因此他们的实现方法基本相同。
望月从良
2024-01-22
1440
自己动手写数据库:解析 select 语句并生成查询树
首先我们需要给原来代码打个补丁,在SelectScan 结构体初始化时需要传入 UpdateScan 接口对象,但很多时候我们需要传入的是 Scan 对象,因此我们需要做一个转换,也就是当初始化 SelectScan 时,如果传入的是 Scan 对象,那么我们就将其封装成 UpdateScan 接口对象,因此在 query 目录下增加一个名为 updatescan_wrapper.go 的文件,在其中输入内容如下:
望月从良
2023-12-15
1750
自己动手写数据库:规划器(Planner)的实现
在上一节我们说明了不同查询树其对应的执行效率不一样。给定 sql 语句,sql 解释器会构造出不同的查询树,因此我们需要专门计算哪种查询树具有最优效率,在数据库系统中,专门负责此工作的模块叫规划器,本节我们研究该模块的实现。
望月从良
2023-09-25
2380
自己动手写数据库:关系代数和查询树执行效率的推导
上几节我们完成了 sql 解释器的实现。通过解析 sql 语句,我们能知道 sql 语句想做什么,接下来就需要执行 sql 语句的意图,也就是从给定表中抽取所所需要的数据。要执行 sql 语句,我们需要了解所谓的“关系代数”,所谓代数本质上就是定义操作符和操作对象,在关系代数里,操作符有三种,分别为 select, project 和 product,操作对象就是数据库表。
望月从良
2023-09-21
2030
自己动手写数据库:实现一个小型 SQL 解释器(下)
本节我们完成 SQL 解释器的最后一部分,它涉及到数据的删除和更改,首先我们看删除语句的解析。我们先看 delete 对应的语法:
望月从良
2023-09-14
2670
自己动手写数据库:视图元数据管理,统计元数据管理
在数据库中,除了数据表外,还有一个重要对象叫视图。视图是由SQL语句将不同字段从不同表中抽取或者构造后形成的新表,跟数据库表不同在于,它不存储在磁盘上,而是在使用时临时构建出来。
望月从良
2023-02-26
3790
自己动手写数据库:实现数据库表的元数据管理
数据库需要管理很多元数据,所谓元数据就是用来描述数据表结构信息的数据。例如在mysql中使用show tables命令,它会把所有表的名称显示出来,这里数据库表的名称就属于元数据。我们要实现的元数据管理包含四部分,分别为表元数据管理,视图元数据管理,索引元数据管理,和统计相关元数据管理。
望月从良
2023-02-26
4180
动手写数据库:并发管理的基本原理
一个好的数据库,其特点必然是吞吐量高,也就是它能在高并发请求压力下保证数据的准确性和安全性,由此并发管理是不可或缺的一环。事实上并发管理是一个相当复杂的计算机科学领域的课题,它几乎可以自成一个领域,是能够与操作系统,编译原理比肩,完全可以成为计算机科学中的支柱性存在,因此它自身也有着丰富且复杂的理论基础,在这里我们就接触一下它的皮毛。
望月从良
2022-12-02
2060
自己动手写数据库:缓存管理的设计
数据库系统设计中一个必须关注的瓶颈就是读写效率。由于数据库系统要处理高吞吐量的数据读写,由于数据量大,系统不能总是把所有数据都存储在内存中,但是频繁的操作磁盘就会导致系统效率大大降低,因此我们必须要有办法权衡数据在内存和磁盘上的存储, 我们要让数据尽可能多的从内存进行读写,尽可能少的触发磁盘操作,因此设计一个有效的缓存管理系统对效率有致命的作用。
望月从良
2022-04-27
5340
从零动手写数据库系统:数据库系统的日志模块实现
任何一个应用只要冠以”系统“二字,那么它一定离不开一个模块,那就是”日志“。既然我们要开发一个数据库系统,那么它必然要有自己的日志模块。日志通常用于记录系统的运行状态,有点类似于快照,一旦系统出现异常,那么管理员或者它的代码本身可以通过扫描分析日志来确定问题所在,或者通过日志执行错误恢复,这点对数据库系统更加重要。
望月从良
2022-04-27
5580
从零写个数据库系统:磁盘的基本原理和数据库底层文件系统实现
我做过操作系统,完成过tcpip协议栈,同时也完成过一个具体而微的编译器,接下来就剩下数据库了。事实上数据库的难度系数要大于编译器,复杂度跟操作系统差不多,因此我一直感觉不好下手。随着一段时间的积累,我感觉似乎有了入手的方向,因此想试试看,看能不能也从0到1完成一个具有基本功能,能执行一部分sql语言的数据库系统。由于数据库系统的难度颇大,我也不确定能完成到哪一步,那么就脚踩香蕉皮,滑到哪算哪吧。
望月从良
2022-04-27
3830
go实现高并发高可用分布式系统:设计类似kafka的高并发海量数据存储机制1
上一节我们实现了日志微服务,它以http服务器的模式运行,客户端通过json方式将日志数据post过来,然后通过http get的方式读取日志。当时我们的实现是将所有日志信息添加到数组末尾,这意味着所有日志信息都会保存在内存中。但分布式系统的日志数量将非常巨大,例如推特一天的日志数量就达到一万亿,国内微博,微信,淘宝等超大规模系统的日志数量估计也是这个等级。假设我们使用一百台服务器运行日志微服务,那么一台将处理10亿条日志,再假设一条日志为64字节,那么如果直接将日志存放在内存就需要消耗64G,再考虑到很多日志存储后很可能再读取,而且一台服务器还需要提供其他程序运行,因此直接将日志存储在内存将是一种巨大的损耗。
望月从良
2022-01-15
5350
使用kafka消息队列中间件实现跨进程,跨服务器的高并发消息通讯
近来工作上接收到一项任务,实现c++后台服务器程序,要求它能承载千万级别的DAU读写请求。目前实现千万级高并发海量数据请求的服务器设计在”套路“上比较成熟,基本做法是形成服务器集群,然后将海量请求分发到集群中的各个服务器,使得服务器面对的请求数量不再“海量”,本质上就是采用分而治之,各个击破的思维来破解高并发的数据请求。
望月从良
2021-05-08
8920
使用预先训练好的单词向量识别影评的正负能量
上一节我们讨论路单词向量化的算法原理。算法的实现需要有大量的数据,一般而言你要收集到单词量在四十亿左右的文本数据才能通过上一节的算法训练处精准的单词向量,问题在于你很难获取如此巨量的数据来训练单词向量,那你该怎么办呢?
望月从良
2018-09-29
6810
没有更多了
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档