工作两年回看,当时自豪的作品已变成了玩具;
不变的是对技术的好奇和热情;
18年底加入PingCAP,真正迈入了DB领域;
有兴趣的同学可看看TiDB系列文章,并贡献PR成为contributor,满足自己好奇心并为开源社区创造价值;
对PingCAP有兴趣的同学也可内推实习或者工作;
=====================
=====================
大概半年前, 我收到了这个问题的邀请.
现在我数据库完成, 我觉得我有底气回答这个问题了.
算是对我这将近一年工作的总结, 也当做是一些分享(zhuangX).
我大致说一下我从一开始做, 到完成我的作品, 大致经历了哪些阶段, 以做参考.
PS:
因为大家对数据库的认知和了解都不同, 所以我的切入点必定无法满足所有人.
不过我想会关注这个问题的人, 大多应该都是用过简单的数据库功能, 感觉非常好奇, 想自己实现一个的人, 就同一年前的我一样.
下面我描述了我实现DB的各个阶段, 你可以在任意一个阶段停下, 然后实现它.
========================================================================================================================================
阶段1: 无事务, 单线程, 仅存在于内存的数据库.
该状态下的数据库, 其实就是一个”索引结构”+”语法分析器”.
语法分析器分析SQL语句, 然后根据逻辑, 去执行相应的操作.
索引结构则是用来快速查询.
由于该版本仅存在于内存, 所以只要你会一些常见的索引算法, 即可完成, 可以称之为”简易内存数据库”.
如你会B+树算法, 就可以实现一个B+树, Bt.
它实现了两个接口, Bt.Insert(key, value) -> void, Bt.Search(key) -> value.
再实现一个”语法分析器”.
如来了一条语句”Insert into student value (tony, 22, 123)”.
”语法分析器”分析该语句, 将value包裹一下, 选取一个该value的键值key.
然后调用 Bt.Insert(key, value).
之后执行”Read from student …” 其实也就是分析一下, 然后执行Bt.Search(key).
该版本数据库完成.
===================================================================================================================&