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-.页面缓冲子系统,它作用于
*** 作系统抽象层之上。
总结以上是内存溢出为你收集整理的SQLite源码结构分析全部内容,希望文章能够帮你解决SQLite源码结构分析所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)