2007年7月26日星期四

读sqlite,理解数据库实现原理

开源的一个好处就是让大家能看到一些优秀的源代码,深刻的了解一些计算机原理。Sqlite就是其中之一。

Sqlite是一个轻量级的c库,实现了一个自包含的,可嵌入的,零配置的SQL数据库引擎(翻译自其网站首页:
SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine。)近来,Sqlite以其独具一格的特性,在很多领域里得到了广泛的应用。

Sqlite的代码简洁清晰,注释极其详尽,看过之后感觉以前在学校学的那点数据库皮毛得到了质的提升:) 大致说来,Sqlite分为3个模块(我姑且这么一分,大家自己去看吧):

  1. Btree模块:这个模块实现了一个基于磁盘存储的,支持多种高级特性的BTree。该模块是数据库的基础,大家大可以直接使用该模块,实现自己的数据库,当然就不支持SQL语句了。

  2. SQL语句编译优化模块:从SQL语句生成能在SQL虚拟机上执行的目标代码

  3. SQL虚拟机:真正在Btree上执行操作的就是它了。


我只花了点时间看了下Btree的实现,顺带因为好奇,写了一个小程序解读sqlite数据库文件的内部结构,了解了数据库的一张表映射到Btree上是什么样的查找结构,很有意思哦。

恩,强烈推荐大家阅读Sqlite的源码。当然,看代码已经很简单了,只需要点这里就OK了(嘿嘿,赤果果的广告):
www.readcode.org/code#sqlite-3.4.1

没有评论: