永发信息网

如何学习sqlite源码

答案:3  悬赏:60  手机版
解决时间 2021-03-31 12:44
如何学习sqlite源码
最佳答案
首选的SQLite架构文档是官方的Architecture of SQLite,理清大体的系统层次。后面继续阅读SQLite Documentation中Technical/Design Documentation章节。阅读代码时根据所在的层次,对应章节描述进行理解。

印象中SQLite有效代码是十万行左右。层次非常完整,SQL解析、VM、BTree、Pager,OS抽象层。考虑到SQLite的几十亿的装机量(Android、浏览器HTML5本地存储库),遇到SQLite本身的Bug,可能性是很低的。所以如果不是数据库方面的专门从业人员,只是从应用层的角度来看,建议从API(List Of SQLite Functions)的角度切入,掌握API文档中有参数的使用,比去钻研内部源码要有效得多。
全部回答
首先说基本配置: PHP SQLite 的使用和配置方法: 在PHP 5.1.x 以后自带了 SQLtie 数据库功能,只需要在配置PHP.ini中开启即可 ;extension=php_sqlite.dll 在PHP 5.2.x 以后自带了 SQLtie PDO数据库功能,只需要在配置PHP.ini中开启即可
先来说说sqlite的资料.
首先sqlite的资料其实是不多不少的.
不少的原因是因为这些资料确实能够让你明白sqlite的设计原理.
说它不多的原因是也就让你明白其原理, 仅此而已.
sqlite的资料主要来自四个地方, 从简到深依次为:
1.<>, 这是一本介绍sqlite"基本原理"的小书, 只有80页左右, 介绍了sqlite的"后端"原理. 这本书在百度有下载, 纯英文版的, 链接:inside sqlite_百度知道. 在上面的github上, 我们项目的同伴对这本书做了翻译, 不过还没完成, 建议直接扫原版.
2.官方文档, 连接:SQLite Documentation. 但是里面的文档对于学习者来说也有轻重之分, 建议主要阅读 "SQLite Technical/Design Documentation" 这一栏的技术文档.
3.<>. 这也是一本说sqlite的小书, 不到200页. 这本书的内容其实和<>有重叠, 甚至不少地方的段落是直接复制过来的... 不过这本书比<>详细很多, 也建议扫描一遍. 这本书我目前在做翻译, 做了3,4,5,6四章的翻译了. 不过是很粗翻译, 不建议直接看...
4.源码注释. sqlite的源码注释非常详细, 详细到比上面两本书说的还多... sqlite的每份.c代码内的注释差不多快比代码还多了, 而且除了将基本架构外, 很多上述资料没有提到的细节, 也在源码注释中被提了出来.
================================================================
接下来说一下本人推荐的学习方法~~
================================================================
下面是认真学习的方法, 如果想快速暴力的学习, 直接看下一段.
想要认真点学习的话.
应该先去看"Architecture of SQLite"这篇文档, 该文档详细的介绍了sqlite的7层结构, 总体被分为了"前段", "中层VM", "后端".
看完arch.html那文过后, 你就知道"前端"主要做的是语法分析, "后端"主要实现了数据库性质(ACID, 增删查改).
个人建议从后端开始学习, 毕竟学习sqlite是学习怎么实现数据库.
后端的tree, pager, os三层, 其实都不难(起码理解起来不难),
我建议OS->PAGER->TREE这样边学习, 边写demo.
简要说一下我在学习这三层过程中遇到的一些点, 希望能帮到楼主.
OS:
os是很薄的一层, 主要是为了提高可移植性而被设计出来的.
学习这一层的方法很粗暴:看"The OS Backend (VFS) To SQLite", 然后去看源码中的"test_demovfs.c".
主要搞清下面三个结构体.
sqlite3_vfs
sqlite3_io_methods
sqlite3_file
在我github中的demo1.1中, 有一个更简单的demo, 可以参考看下里面的os.c, os.h, unix_os.c三份代码.
-------------------------------------------------
Pager:
Pager主要实现了三段功能: ACID, log, cache.
先说ACID:
ACID的这部分我只看了最最基本的方法, 然后选择跳过的, sqlite实现ACID的方法可以看"Atomic Commit In SQLite",
这里是我翻译的, 能看,
"how-to-implement-a-DB-like-sqlite/SQLite怎样实现原子性.md at master · qw4990/how-to-implement-a-DB-like-sqlite · GitHub".
除了这篇最基本的文档, 推荐看<>的3章和4章, 看完能理解sqlite实现ACID的基本方法.
接着是cache, sqlite提供了插件式的cache结构, 所以你或许会惊讶为什么sqlite里面同时有pager.c, pcache.c, pcache1.c:
cache这个部分比较简单, <>第三章, <>第五章都有详细的介绍, 主要讲解了pager实现cache的方法.
在我github中的demo1.1中, cache的功能也已经完成了, 1 可以参考看下里面的pager.h, pager.c, pcache.c, pcahce1这四份代码.
最后是log:
这部分我现在直接选择了忽视...
----------------------------------------------------
Tree层:
sqlite的tree层就是用B+/B-树维护数据, 以达到快速"增删查改"的目的.
这一层在官方文档里没多少资料.
先是算法本身, 也就是B+/B-/B树, 没什么好说的, 很多算法书都有.
接下来重点是sqlite怎么将B树应用到自身的数据库中的.
这一点可以看<>的第5章, <>的第6章, 都有很详细的介绍.
<>讲得更为仔细, 除了说原理外, 还说了sqlite里btree大致被分为了几个结构体在工作.
以上就是我学习后端遇到的一些点吧.
=============================================================
如果嫌弃上面的学习方法麻烦的话,
可以先扫一下"Architecture of SQLite",
接着再看一下"Atomic Commit In SQLite",
最后简单粗暴的把推荐的那两本书扫完,
也大致知道sqlite是怎么设计的了.
不过个人认为sqlite是一个"大师级的精致的工艺品", 光看完两本书就说自己学完了它, 未免有点"暴殄天物".
除了基本的数据库设计方法(也就是那两本书的内容), sqlite的源代码中所蕴含的编程技巧, 工程设计, 以及各种小考虑, 也是非常值得吸收学习的.
=============================================================
最后总结一下
如果想简单粗暴快捷的学习, 直接扫arch.html, atomiccommit.html和那两本书, 就能明白sqlite是怎样被设计的了.
如果想深入学习, 建议从7层开始向前学, 边翻文档边看源码边写demo.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我想看10月15号十六号的天气
求助:新福克斯已经开了半年多了油耗还很高
打印机色带卡怎么安装
明年准备去参加选秀节目,现在大一,做一个歌
相亲男约女方两次都没花钱是什么意思啊?
偷窃在日本被判刑几年
CPU i76200比第三代的i5是多快?
第8题:口中一朵云(打一字),
图吧地图中的全国地图基础数据是什么
功率是55W,那风扇电机应该就是55W的吗
宣告婚姻无效程序是什么
无锡惠钱安装,无锡奇能电气怎么样
如果某种商品先提价20%,再打八五折出售,则
二车交通事故一方正常行驶一方刚起步
小米Note3#求大神告知怎么验货是否新机
推荐资讯
求耽美种田文,主受,情节不要发展太快,慢热
云南省哪些州市有仲裁委员会?
八年级上数学寒假作业(北京教育出版社)
除了王者荣耀还有什么游戏里有露娜这样可以月
我的双手献给主动作示范
58挂靠网上找证书挂靠靠谱吗,哪家网站比较好
为何人要多做善事
星际比特的官网是什么?
Creo怎么将frm文件设置为默认模板
奶块无视领,怎么做?
三星 ua49k5300ajxxz是4k电视吗
现在的社会,真是越来越乱了,什么子母恋,父
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?