Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

SQLite源码结构分析

$
0
0

4.1嵌入式数据库一SQLite
嵌入式数据库SQLite与、Berkeley DB各有千秋。在功能方面,SQLite略逊色于Berkeley DB。但SQLite也有Berkeley DB所不具有的优点:首先,SQLite支持大多数的SQL92标准语

句。并且支持索引、事务、触发和一系列的用户API以及驱动。其次,SQLite支持事务,具有事务的ACID特性,即原子性、一致性、独立性和持久性,在很多功能单元添加了有效的

验证算法,就有较好的数据保护功能,一般不会造成数据的丢失或损坏。再者,相对于Berkeley DB的双重授权方式(或者采用GPL授权方式来公开所开发的源代码或者购买商业授权

),SQLite的授权方式对于商业软件来说非常友好,采用公众授权(Public Domain)的方式,即使作为商用也没有丝毫的限制。而且,在SQLite中使用了经过优化的lemon算法,

lemon算法的引入不仅使得查询时对系统内存的占用量大大减少,同时也添加了非末端析构的功能,即当发生未预期到的SQL语法错误,引发程序异常时,不会导致内存渗漏,可见

,它非常适合那些存储器资源受限制的系统。从体系结构上看,SQLite主要可以分为八个子系统。标记处理器(Tokenizer)的作用是当执行一个包含sQL语句的字符串时,接口程序

要把这个字符串传递给Tokenizer。Tokenizer把原有字符串分成一个个标示符,并把这些标示符传递给剖析器。Tokenizer是在C文件夹tokenize.c中用手编译的。分析器(Parser)

是由L,omollLALR(1)parser generator产生的。SQLite使用自带的代码生成器(code generator)来来快速、高效的生成可执行代码。当分析器(Parser)解析完所有的语句,并把它

们都转换称为SQL语句之后,代码生成器(code generator)负责产生虚拟的机器代码。这些代码与SQL语句所起的作用相同。在生成虚拟代码的过程中,代码生成器中存在的大量.c

文件,如attach.c,auth.c,build.c,select.c,insert.c,delete.c,where.c,expr.c,pragnmc,trigger.c,vaguum.c,以及update.C等【2刀,它们扮演着各

种角色,发挥着重要的作用。首先where.C负责处理SQL语句中WHERE子句的代码的生成。delete.g负责处理SQL语句DELETE子旬的代码的生成。insert.c负责处理SQL语句中

INSERT子句的代码的生成。select.c负责处理SQL语句中SELECT子句的代码的生成。还有一些其它的虚拟代码是由build.c生成的。虚拟机器fvirh】almahine)负责运行由代码生

成器产生的一系列的虚拟代码,它本身是被包含在一个单独的文件vdbe.c中的,主要用来执行一个抽象的为操作数据库而设计的计算引擎。在虚拟机器有一个用来存储中间数据的

存储栈。虚拟机器有它自己的头文件,即vdbe.h以及vdbeInt.h,vdbe.h将虚拟机器与其它的SQLite类库相连瞄¨,vdbeInt.h则对虚拟机器的结构进行了明确定义。左下侧的

Backend中的B—tre系统采用经过优化的B.tree结构,可以有效降低对磁盘查找时的系统开销。SQL使用B.tree文件对数据库进行磁盘维护。在文件B.tree.c中有对索引结构的

详细绍。数据库中的每个表格和目录都是用单独的B.tree结构进行存储,所有的B.t都以文件的形式存储在数据库中【引。Baekend中间层是pager-.页面缓冲子系统,它作用于

操作系统抽象层之上。

作者:chenhuijie666 发表于2013-1-11 15:25:08 原文链接
阅读:23 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>