原创

手撸一个数据库(一)

温馨提示:
本文最后更新于 2022年11月20日,已超过 8 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

在2021年12月10日,1987年生人的我整整34周岁了。

在老家,我实际上过完年就36了。

但是幸运的是,我觉得自己有学不完的东西。感觉自己的思想储备在不断丰富,正是成为一个真正程序员的开始,

而不幸的是,学不完的东西是真的太多了。但是说到底,也就是操作系统、数据库、JVM、分布式及spring、vue、MQ、redis这样一些框架或中间件而已。至于算法么,额,已经放弃,了解就好,如同英语(chrome翻译)。

十年之后,再次重学数据库与操作系统。

前段时间,网上冲浪的时候,看到某位同学在github上分享了mit(麻省理工)的6830课程。

如这个 https://github.com/dzdx/mit-6.830-2021

这个 https://github.com/happyer/simpledb

java版的教你怎样手撸一个数据库。

然后又在V2EX上看到了另外一个同学推荐的CMU(卡耐基梅隆大学) 15-445/645数据库开发课程,是simviso翻译的。实现语言是C++,额,这个还没学过,但是不妨碍我听课。有必要可以弄一弄。

B站地址:av85655193

然后花了49元去simviso的官网购买了完整翻译课程。目前正在学习中,刚看到存储设计。

早上上班前翻了下公众号,看到cxuan的c课程推荐,正好昨天又看到了飞哥的推荐,《深入理解计算机系统》、《C Primer Plus》这两本书。好的,它们已经加入我的待购套餐。

前两周刚忙完一个500万项目的投标工作,这段时间又开始看PMP的课程,感觉很充实也很忙碌,很忙碌又很满足。

PMP已经拖了一年了,因为写一本Linux入门书的原因,10月终于交了全稿,目前还在校稿中。

还做了一个《Linux常用命令》的公众号,嗯,也好几周没更新了,哈哈。

今年个人方面就两个目标吧,一是拿到PMP的证书,二是看完CMU的课程,手撸一个简易数据库。

然后在工作方面,搭建团队的devOps流程,搭建一个类似腾讯TAPD的devOps工作流水线。

有很多东西真的是相通的,例如刚看的CMU课程,其中说到数据库页的分布和tuple的插入,每一页默认大概都是在4K上下(因为操作系统的文件系统就是4k大小,需要保持原子性.但是也不一定,操作系统也可以自定义设置,Oracle、DB2、SQLSERVER还开发了自己的文件系统。4K只是默认值),每一页数据都是由header、data两部分组成的,这是跟Linux的文件系统一致的,在header中存放了页的大小、checksum等信息,在header中存放了solt array这样的数组,每个solt都指向一个tuple。

我们在数据插入的时候,总是从最后插入。如果有tuple 1、tuple 2、tuple 3、 tuple 4 按顺序排列,我们删除tuple 2的时候,中间的空间就被浪费了,它不能再被插入数据。

这就让我想到了Windows为什么要做磁盘整理,哈哈。

也让我想到了,之前做数据仓库的时候,为什么会出现水位线的问题。需要把这种被删除大数据量的表中的数据,重新插入到一个新表中,再删除原表或者truncate原表,然后数据库的表空间文件才会缩小。

这是因为我们为了数据插入的效率,不可能在插入的时候还全表扫描一下,只能从后面追加。

因为有之前的知识积累,所以很容易就理解了这部分内容。

突然感谢之前的自己,每一分努力都是没有白费的。

有时候看似无用的东西,会在未来的时间长河中,交汇而入。从数十道娟娟溪流,汇聚成滚滚浪涛。

当然,还要感谢我的妻子,把我的儿子照顾得很好,承担了家庭中很大的压力。才能让我有这么多时间,可以任性地做自己爱做的事情。

感谢这个行业,是这么有趣。永远有学不完的东西。

当然,学不完的东西,真的是太多了!哈哈。

正文到此结束