sqlite源码分析之路
对sqlite的源码做一个尽可能详尽完整的分析。此分析将建立在对sqlite源码的精读,分解,调试的基础之上,结合数据库文件格式分析,用例子说话。力争以一个老程序员的视角对sqlite这份经典源码做出全新的阐释。
littleZhuHui
程序员
展开
-
sqlite源码分析之路(二) 数据库文件格式探索(8)小结篇
小结书接上回,前面几篇给sqlite的B树页数据格式做了一些分析,接下来准备转到源码的阅读上去。其实数据库上还有一些页格式没有分析到,这些就留到后面去做。在做源码阅读之前,把这一块的工作做一个小结。...原创 2019-06-26 10:05:11 · 251 阅读 · 0 评论 -
sqlite源码分析之路(二) 数据库文件格式探索(7) 索引B树叶子节点分析
引子书接上回,前面分析了三种B树节点的结构,现在还剩下最后一种。说实话,我是宁愿写代码也懒得写文档的人。因为写代码有编译器帮你检查错误 ,写文档就只有自已检查错误。而我又经常犯一些超低级错误,写在文档里让人看见,真是很没有面子。可是现在能坐在电脑前的时间越来越少,再不抓紧时间写点东西。以后就是想写,也是有心无力了。树欲静而风不止,人欲睡而电不停,奈何!奈何!正式开始上一篇文章说到只要在数据库...原创 2019-06-24 22:22:21 · 411 阅读 · 0 评论 -
sqlite源码分析之路(二) 数据库文件格式探索(6) 索引B树内部节点分析
引子书接上回。前面了解了数据表B树的内部节点与叶子节点的结构。接下来要分析索引B树的节点结构。下面先看一下索引B树的内部节点。数据表B树与数据结构中的B+树对应,索引B树与数据结构中的B树对应。B树与B+树的最大不同在于,在B树的内部节点上也存放有记录数据。在接下来的分析中,咱们可以验证这一点。...原创 2019-06-24 21:58:09 · 502 阅读 · 0 评论 -
sqlite源码分析之路(二) 数据库文件格式探索(5) 数据表B树内部节点分析
引子书接上回,前面看了数据表B树叶子节点。接下来要看一看数据表B树内部节点。数据表B树内部节点是4种B树节点中结构最简单的,为什么?它没有payload。它里面的单元不包含具体的记录数据,只包含关键值与左孩子指针,在逻辑上形成树形结构。正式开始要想得到一个数据表B树内部节点,最简单的办法就是向sqlite数据表中多插入一些数据,当数据在一页内放不下时,内部节点就出现了。B树的深度也就增长了...原创 2019-06-24 21:27:37 · 311 阅读 · 0 评论 -
sqlite源码分析之路(二) 数据库文件格式探索(4) 数据表B树叶子节点分析
引子书接前回,上次分析了B树节点的页头,不论是数据表对应的B+树,还是索引对应的B树,树节点分成两大类。一类是叶子节点,一类是内部节点。叶子节点的页头大小是8个字节,内部节点的页头大小是12个字节。为什么?内部节点要在页头的最后面加上4个字节存放最右孩子的页号。所以多出来4个字节。4个字节可以看作一个32的无符号整数。所以sqlite数据库中最多有2^32 - 1页。如果一页是1k.则数据库...原创 2019-06-24 19:01:44 · 484 阅读 · 0 评论 -
sqlite源码分析之路(二) 数据库文件格式探索(3) B树页头分析
Btree页是sqlite数据库中最重要的页类型。每个Btree由4部分组成1.页头2.单元指针数组3.未分配空间4.单元内容区下面先来分析页头内容:bTreeInt.h中说明如下:** The page headers looks like this:**** OFFSET SIZE DESCRIPTION** 0 1 Fla...原创 2019-06-24 17:08:57 · 719 阅读 · 0 评论 -
sqlite源码分析之路(二) 数据库文件格式探索(2) 变长整型分析
sqlite中大量使用了变长整形,为了分析sqlite的数据文件格式 ,这是一个绕不过去的点。变长整数由1至9个字节组成,如果整形值比较小,占用的字节数就少,整形值比较大,占用的字节数就多。这实际上是一种压缩编码技术。变长整型的每个字节的低7位有效,第8位是标志位。在组成可变长整数的各字节中,前面字节(整数的高位字节)的第8位置1,只有最后一个字节的第8位置0,表示整数结束。觉没觉得得和c语言的...原创 2019-06-22 14:10:08 · 542 阅读 · 0 评论 -
sqlite源码分析之路(二) 数据库文件格式探索(1) 数据库文件头分析
要深入了解sqlite数据库,数据库文件的存放格式必须熟悉原创 2019-06-22 10:48:15 · 1008 阅读 · 0 评论 -
sqlite源码分析之路(一) 分散文件的源码编译成easySqlite
这两天下了决心,要好好地看一下sqlite的源码。于是从官网上下载了源码。很认真地看了,但看不下去。为什么?这已经是一个很成熟的项目,从2000年的第1版到2019年的3.29.0版,进化得已经很成熟,代码量也有几十万行了。光用文本工具看源代码是看不下去了。 想到的办法是先看官网上的文档(https://www.sqlite.org/docs.html)。sq...原创 2019-06-16 12:24:38 · 1742 阅读 · 0 评论