lishuhuakai / sqlite_reading

sqlite的阅读笔记

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

sqlite_reading

日子过得很无聊,打游戏提不起兴致,出去逛也无人陪伴,漫漫长夜更是难以入眠.于是就想到了读代码,不知道为什么,我就是突然很想读一下sqlite的源码,所以,就开坑了.

代码大致10w行,估计是除了linux内核之外,我要阅读的最长的代码了.不过没关系,我有的是耐心,总之,总的找点事情来做,不是吗?这份代码,个人估计花费的时间最长应该在半年左右,最短的话,三个月?好消息是已经有大神解读过这份代码了,有了他们的帮助,理解起来会轻松很多.坏消息是,看了这份代码,对自己的工作帮助并不大.不过,没啥关系,自己喜欢就行.

读码计划

  1. 语法分析与词法分析部分可以忽略,包括Tokenizer, Parser.只有code Generator可以简单看一下(这一部分自己实现起来也没有多少难度).

  2. ACID的是如何实现的,是我们要关注的核心之一,也就是Pager模块是重点.

  3. VDBE模块也是一个重点,主要只要关注增删改的优化.

读码建议

  1. 不要死抠细节,没啥意义,我们大概率不会去改代码.

  2. 关注数据结构,关注如何实现的即可.也就是说,重要的其实只是**而已.已经有很多参考资料列举了**,我们做的,其实只是用脑袋去验证而已.

  3. sqlite有tcl的测试脚本,可以通过测试来帮助理解.

参考资料

  1. 源码,源码中自带有很详细的注释,可以帮助理解.
  2. << sqlite Database System and Implementation >>
  3. 官方文档 Database FIle Format,阐述了数据库文件格式,对读代码非常有帮助,必读.
  4. 本人在Document文件夹中放入了一些参考资料,markdown格式,如果出现显示不正常的情况,可以使用typora尝试打开,其他软件暂时不保证兼容性.

读码日志

0907

btree模块接近尾声,读这个模块,最主要的是要熟悉数据库的格式,以及B+树算法,sqlite的实现其实比较绕.还好,没有被卡住,接下来是vdbe模块了.速度还行,感觉每周都能过一个模块,可能到国庆,就能大致读完sqlite,这个比我想象的要快很多.

btree以及更下层的pager模块,更多的是做了一层抽象.为上层提供可靠的服务.

0912

读码计划比想象的要快得多,vdbe模块估计是我要了解的最后一个模块了,大家其实可以忽略掉前端,因为前端的知识都是死的.按照套路来就行了.没有啥技巧.

现在已经进行到了vdbe模块,这个模块只要认真熟悉字节码即可,理解这个模块,比较快捷的方式,是explain命令,将常用的命令都explain一遍,跟着字节码追踪一遍,就能理解个七七八八.

0919

今天读的代码,是字节码的生成,包括insert (insert.c),update(update.c), delete(delete.c), where(where.c),前面三个生成的代码很容易理解,where准确的来说,属于插入新的一部分,这部分代码应该是最难啃的,因为要利用索引来提高查找速度,不过也还好.

1002

代码生成部分基本啃完了,注释也基本写完.接下来就是注释 sqlite3 向外部暴露的 c 接口了.

之后可能还会有一些零星的注释.但是估计也不会太多了.

2022.12.31

添加相对完整的代码注释,阅读笔记,不出意外,这应该是最后一次更新这份阅读笔记了.以后如果不是有修改sqlite的需求,估计不会再花更多精力在sqlite代码的解读上面.

About

sqlite的阅读笔记


Languages

Language:C 90.6%Language:Tcl 3.9%Language:Shell 3.1%Language:Makefile 0.9%Language:Yacc 0.6%Language:HTML 0.4%Language:M4 0.2%Language:Batchfile 0.1%Language:Awk 0.1%Language:Roff 0.1%