zoukankan      html  css  js  c++  java
  • 手撸一个数据库(一)

    在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原表,然后数据库的表空间文件才会缩小。

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

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

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

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

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

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

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

    作者:妖生
    <<<<我的公众号:姚毛毛的博客
    Linux常用工具站:https://www.linuxido.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
    如果喜欢本文就点个【推荐】吧。
  • 相关阅读:
    WebSocket属性的简介及使用
    JAVA_基础逻辑运算符与位运算符使用
    JAVA_基础数据类型介绍与基本数据类型之间的运算规则
    ES6特性整理
    Vue-cli中的安装方法
    Kubernetes核心原理(一)之API Server
    Kubernetes核心原理(四)之Kubelet
    kubernetes-整体概述和架构详解
    Kubernetes dashboard认证访问
    kubeadm HA master(v1.14.0)离线包 + 自动化脚本 + 常用插件 For Centos/Fedora
  • 原文地址:https://www.cnblogs.com/yaomaomao/p/15670559.html
Copyright © 2011-2022 走看看