联系我们
    插件电感_大电流电感
热门搜索
点击排行
推荐电感
推荐阅读
推荐电感
推荐电感
猜猜你喜欢的
行业知识 您所在的位置: 电感 > 行业知识

SQLite系统构架及虚拟机分析

来源:    作者:    发布时间:2015-08-20 07:50:49    浏览量:

磁环电感摘 要: 就目前广泛使用的轻量级数据库SQLite的构架进行分析,特别是对其中的虚拟数据库引擎(VDBE)做了原理性的剖析,并结合实例,展示了SQLite的应用及SQLite内部VDBE指令程序的运行方式。
关键词: SQLite;构架;VDBE;虚拟机

SQLite是遵守ACID的轻量级关系型数据库管理系统,完全免费、开源,无需任何配置也无需任何安装程序[1]。它广泛应用在各种嵌入式系统中,在iOS和Android等系统中都是集成在各自的库中。
虚拟机压膜电感器工厂是当前比较流行的一种软件构架,特别是在解释性编程语言领域。在安全领域,虚拟机也被用于实现软件的加密,是公认的一种非常高效且实用的技术手段。SQLite用较小规模的代码用C语言实现了一个程序虚拟机,提高了代码的独立性,降低了耦合性,同时保持了很高的效率。
1 SQLite数据库构架
图1所示为SQLite系统的总体构架图[2]。整体上SQLite可以分为前端和后端:前端负责从用户数据到平台不相关的指令的转换;后端处理数据流,深入到具体数据库数据在磁盘上的操作,这些数据是和平台相关的。SQLite的平台无关性通过其内部实现的虚拟数据库引擎VDME(Virtual Database Engine)来完成,总地来说,就是将SQL语句先翻译成一种专门设计的语言,然后下层再调用平台相关的系统API接口,完成相应的功能。

SQLite的源代码由96个C语言文件(.c和.h)组成,在编译之前会由Makefile生成一个完整的文件,即为可以在官方网站上下载的sqlite3.c和sqlite3.h等文件,然后编译形成所需要的库或者可执行文件。
图1给出了SQLite的主要模块及相互之间的关系,以下将分别介绍各个部分的功能。
(1)接口(Interface)
SQLite库提供的对外不调用的接口大多数都在main.c、legacy.c和vdbeapi.c中,其他一些散布在源代码的不同部分。对接口的查询可以在文档中找到详细的介绍。为了避免命名上的冲突,所有外部可以调用的接口都以sqlite3_开头[3]。
(2)SQL编译器(SQL Compiler)
这是一个比较完整的编译器构架,分别完成词法分析、语法分析和中间代码生成。词法分析器(Tokenizer)由C语言实现,包含在tokenize.c中;语法分析器(Parser)由Lmon LALR(1)生成,和YACC/BISON类似,不兼容,但是生成的代码是可重入且线程安全的,代码包含在parse.c中;代码生成器(Code Generator)生成虚拟机执行的中间代码,包含的文件相对较多,例如select.c、update.c等,大多和SQL命令同名对应。
(3)虚拟机VM(Virtual Machine)
代码生成器生成的中间代码会通过VM执行。这部分后面会有更详细的分解。
(4)B-Tree(B-树)
数据库在磁盘上的操作都是通过B-树的,对应于数据库中的每一个表或者索引都会有相应的B-树。实现和接口分别在btree.c和btree.h中[4]。
(5)页缓存(Page Cache)
数据的读写都以Chunk为单位进行,这样可以提高效率。页缓存负责这部分工作,同时提供了回滚(rollback)等功能,并对数据库文件进行管理。实现和接口分别在pager.c和pager.h中。
(6)系统接口(OS Interface)
SQLite提供了一个系统抽象层,定义在os.h中。每个支持的平台有自己对应的实现文件,例如os_uinx.c和os_win.c(及相应的头文件os_unix.h和os_win.h)。
(7)功能和测试(Utility和Test Code)
2 VDBE框架及关键源码分析
虚拟数据库引擎VDBE(Virtual Database Engine)居于SQLite数据库的核心部分。从整个SQLite的构架可以看出,它处在整个系统的中间部分:前端代码完成对SQL语言的编译,相当于简化版本的一个编译器;后端完成物理上的操作,即利用B-Tree和Pager对物理硬盘上的数据进行实际的操作。VDBE完成了这个层次上的抽象链接。
整个虚拟数据库引擎(VDBE)由若干个C语言文件组成,主题实现都包含在了vdbe.c(vdbe.h)中。vdbeInt.h定义了VDBE内部使用的各种结构和函数原型。vdbeaux.c实现了VDBE内部和整个SQLite构建VDBE程序需要的其他功能性函数代码。vebeaip.c包含了供外部接口函数(SQLite库外的应用程序,如sqlite3_bind系列函数)使用的一些结构。vdbemen.c 实现了在vdbe的存储管理。
对于用户的SQL语句,编译器会生成一个虚拟机实例。虚拟机实例在内部和外部是不同的。对内看到的是一个vdbe结构的实例,这个结构定义在vdbeInt.h中,代码如下:

新手求教protel99se在画PCB时铜皮导线是直接用画线工具然后设置合适的线宽来画,还是用画线工具划出不规则线路(多边形)然后填充成一条线路?根据自己选择适合的,什么事情不可能是一次性就能画得好的,

嵌入式软件与硬件的集成测试过程研究 引言软件质量即业务生命。软件测试项目已经变得比以往任何时候都复杂和困难。1979年,Glenford Myers在《The Art of Software Testing》一书中提出 测试的目的是证

开关电源技术发展历程的十个关注点 4月08日 第三届·无线通信技术研讨会 立即报名 12月04日 2015•第二届中国IoT大会 精彩回顾 10月30日ETF•智能硬件开发技术培训会 精彩回顾 10月23日ETF•第三届 消费

大电流电感
 
在线客服