手撸一个数据库(一)
在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原表,然后数据库的表空间文件才会缩小。
这是因为我们为了数据插入的效率,不可能在插入的时候还全表扫描一下,只能从后面追加。
因为有之前的知识积累,所以很容易就理解了这部分内容。
突然感谢之前的自己,每一分努力都是没有白费的。
有时候看似无用的东西,会在未来的时间长河中,交汇而入。从数十道娟娟溪流,汇聚成滚滚浪涛。
当然,还要感谢我的妻子,把我的儿子照顾得很好,承担了家庭中很大的压力。才能让我有这么多时间,可以任性地做自己爱做的事情。
感谢这个行业,是这么有趣。永远有学不完的东西。
当然,学不完的东西,真的是太多了!哈哈。