如何学习sqlite源码


先来说说sqlite的资料.
首先sqlite的资料其实是不多不少的.
不少的原因是因为这些资料确实能够让你明白sqlite的设计原理.
说它不多的原因是也就让你明白其原理, 仅此而已.
sqlite的资料主要来自四个地方, 从简到深依次为:
1.<>, 这是一本介绍sqlite"基本原理"的小书, 只有80页左右, 介绍了sqlite的"后端"原理. 这本书在百度有下载, 纯英文版的, 链接:inside sqlite_百度知道. 在上面的github上, 我们项目的同伴对这本书做了翻译, 不过还没完成, 建议直接扫原版.
2.官方文档, 连接:SQLite Documentation. 但是里面的文档对于学习者来说也有轻重之分, 建议主要阅读 "SQLite Technical/Design Documentation" 这一栏的技术文档.
3.<<SQLite Database System: Design and Implementation>>. 这也是一本说sqlite的小书, 不到200页. 这本书的内容其实和<<inside sqlite>>有重叠, 甚至不少地方的段落是直接复制过来的... 不过这本书比<<inside sqlite>>详细很多, 也建议扫描一遍. 这本书我目前在做翻译, 做了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".
除了这篇最基本的文档, 推荐看<<SQLite Database System: Design and Implementation>>的3章和4章, 看完能理解sqlite实现ACID的基本方法.
接着是cache, sqlite提供了插件式的cache结构, 所以你或许会惊讶为什么sqlite里面同时有pager.c, pcache.c, pcache1.c:
cache这个部分比较简单, <<inside sqlite>>第三章, <<SQLite Database System>>第五章都有详细的介绍, 主要讲解了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树应用到自身的数据库中的.
这一点可以看<<inside sqlite>>的第5章, <<SQLite Database System>>的第6章, 都有很详细的介绍.
<<SQLite Database System>>讲得更为仔细, 除了说原理外, 还说了sqlite里btree大致被分为了几个结构体在工作.
以上就是我学习后端遇到的一些点吧.
=============================================================
如果嫌弃上面的学习方法麻烦的话,
可以先扫一下"Architecture of SQLite",
接着再看一下"Atomic Commit In SQLite",
最后简单粗暴的把推荐的那两本书扫完,
也大致知道sqlite是怎么设计的了.
不过个人认为sqlite是一个"大师级的精致的工艺品", 光看完两本书就说自己学完了它, 未免有点"暴殄天物".
除了基本的数据库设计方法(也就是那两本书的内容), sqlite的源代码中所蕴含的编程技巧, 工程设计, 以及各种小考虑, 也是非常值得吸收学习的.
=============================================================
最后总结一下
如果想简单粗暴快捷的学习, 直接扫arch.html, atomiccommit.html和那两本书, 就能明白sqlite是怎样被设计的了.
如果想深入学习, 建议从7层开始向前学, 边翻文档边看源码边写demo.
 3    1  评论 分享 举报 收起
greystar_cn 
知道合伙人软件行家 2018-07-27
首选的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文档中有参数的使用,比去钻研内部源码要有效得多。
 本回答被网友采纳

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CSDN是一个知识分享平台,其中包含了大量关于Qt和SQLite源码分享和教程。Qt是一个跨平台的应用程序开发框架,它提供了一套丰富的图形界面和基础库,方便开发者进行跨平台的软件开发。SQLite是一种嵌入式数据库,它提供了一个轻量级、速度快、易于使用的数据库引擎。 在CSDN上可以找到很多关于使用Qt和SQLite开发应用程序的示例代码和教程。比如,可以找到如何使用Qt进行GUI设计和编写数据库操作的代码示例。通过这些源码和教程,开发者可以学习如何在Qt中使用SQLite进行数据库操作,比如创建数据库、执行SQL语句、插入、删除、修改和查询数据等。这对于想要开发跨平台应用程序并具有持久化数据存储需求的开发者来说非常有帮助。 此外,CSDN上还有很多关于Qt和SQLite深入原理的文章和讨论。比如,可以找到有关SQLite数据库连接、事务处理、性能优化等方面的讨论和源码分析。通过阅读这些文章,开发者可以更深入地了解Qt和SQLite的工作原理,从而更好地应用于实际项目中。 总的来说,CSDN上关于Qt和SQLite源码和教程非常丰富,可以为开发者提供很好的学习和参考资料。无论是想要入门学习还是深入研究,CSDN都是一个不错的选择。 ### 回答2: CSDN是一个知名的技术社区,提供各种技术相关的文章、教程和资源。QT是一种跨平台的应用程序开发框架,可以用于开发各种类型的应用程序。SQLite是一种轻量级的嵌入式数据库,可以在各种平台上使用。 CSDN上有很多关于QT和SQLite的文章和分享,其中包括相关的源码和教程。我们可以通过搜索关键词"QT SQLite",在CSDN上找到很多与此相关的内容。 在这些源码中,主要涉及到QT如何使用SQLite数据库进行数据存储和管理。我们可以学习如何建立数据库连接、创建表格、插入和读取数据等操作。同时,还可以了解如何使用QT提供的各种功能和类来简化数据库操作的步骤,例如利用QT的模型/视图架构进行数据的展示和修改。 CSDN上的源码分享可能是以示例程序或者案例的形式存在的,我们可以通过运行这些程序,理解和学习QT和SQLite的整合使用方法。通过阅读源码和教程,我们可以学习到如何在QT中使用SQLite进行数据持久化存储,从而应对各种应用程序的需求。 总之,CSDN上关于QT和SQLite源码分享是非常有价值的资源,可以帮助我们学习如何在QT应用程序中使用SQLite数据库。 ### 回答3: CSDN是一个知名的技术社区,提供了大量的技术文章和资源供开发者参考学习。其中涉及到的内容包括Qt和SQLite源码。 Qt是一款跨平台的应用程序开发框架,它提供了丰富的工具和组件,能够帮助开发者快速构建高效、可靠的应用程序。Qt的源码可以在CSDN上找到,开发者可以通过阅读源码了解Qt的实现原理,学习Qt框架的使用方法和技巧。同时,CSDN上也有很多关于Qt的博客和教程,可以帮助开发者更加深入地理解和应用Qt。 SQLite是一种轻型的嵌入式数据库引擎,它以其小巧、高效和易用的特点而广受欢迎。SQLite源码也可以在CSDN上找到,开发者可以通过研究源码了解SQLite的内部机制和算法,从而更好地理解和应用SQLite。CSDN上还有关于SQLite的文章和教程,可以帮助开发者学习如何使用SQLite进行数据存储和处理。 总的来说,CSDN是一个宝贵的资源,提供了Qt和SQLite源码和相关教程,供开发者学习和参考。通过研究源码,开发者可以深入理解这两个技术的底层原理,提升自己的技术能力和开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值