微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLite学习笔记3

sqlite的体系结构介绍:

sqlite是由接口(Interface)、编译器(Compiler)、虚拟机(Virtual Machine )和后端程序(Back End)组成。

还有另两种对体系结构的图示比较简单:

接口(Interface) :

sqlite c API组成,程序、脚本、库文件等等都是通过它与数据库进行交互的,转化为对API的调用(ODBC和JDBC也一样)。数据库的使用者,通过API与数据库通信。

编译器(Compiler):

包含分词器(Tokenizer)、分析器(Parser)、代码生成器(Code Generator)。其中,Tokenizer 和Parser 负责检查sql语言的语法,转化为分层处理的数据结构语法树,送给Code Genetator 处理成汇编代码,送给VM(虚拟机)执行。

虚拟机(Virtual Machine):

也叫做虚拟数据库引擎(Virtual Database Enegine),是内核中最重要的一部分。基于寄存器,128个操作指令(opcodes),与系统的OS、cpu、系统体系相互独立,专门处理数据。它的指令集中所有的指令或者用来完成具体的数据库操作(比如打开一个表的游标、做记录、提取一列或者开始一个事务等),或者以某种方式控制栈为完成这些操作做准备。sqlite中的所有sql语句----从选择和更新记录到创建表、视图以及索引----都是首先编译成虚拟机语言,形成一个独立的定义了如何完成给定的命令的指令集。VDBE是sqlite的核心,它之前的所有模块都是用于创建VDBE程序的,它之后的所有模块都是用于执行VDBE程序的,每次执行一条指令。

后端(Back End):

包含B-tree、页缓存(page cache,pager)、操作系统接口(系统调用)。B-tree和page cache共同对数据进行管理。B-tree的主要功能就是索引,它维护着各个页面间的复杂的关系,便于快速找到所需数据。而pager的主要作用就是通过OS接口在B-tree和disk之间传递页面。B-tree的职责就是排序。它维护着多个页之间错综复杂的关系,这些关系能保证快速定位并找到一切有联系的数据。B-tree将页面组织成树状结构(这也是它叫做B-tree的原因),这种组织结构很适合搜索页面就是树的叶子。

详细点说就是:pager(sqlite的一种数据结构)帮助B-tree管理页面,它负责传输。pager根据B-tree的请求从磁盘读取页面或者向磁盘写入页面。磁盘操作是目前计算机必须做的工作中最慢的事情之一。因此pager试图通过将频繁使用的页面缓存在内存中来加速这一操作,从而最小化与硬盘直接交互所花费的时间。pager的功能描述页包含事务管理、数据库锁以及崩溃恢复,其中许多功能是通过OS接口(OS Interface)实现的。像文件锁一样的很多事情在不同的操作系统上实现是不同的。OS接口(OS Interface)为sqlite其他模块提供了屏蔽这些差异的抽象层。最终的结果就是其他模块看到的是一个一致的对外的系统接口。所以,pager不用担心在Windows上以一种方式锁文件,而在其他不同操作系统上(例如UNIX)上使用另一种方式。这就使得sqlite很容易移植到不同的操作系统上。

注意最后一个图可以这样解释:

前端预处理应用程序传递过来的sql语句和sqlite命令。对获取的编码分析,优化,并转换为后端能够执行的sqlite内部字节编码。后端是用来解释字节编码程序的引擎。该引擎做的才是真正的数据库处理工作。

工具和测试代码

工具模块中包含各种各样的实用功能,还有一些如内存分配、字符串比较、Unicode转换之类的公共服务也在工具模块中。这个模块就是一个包罗万象的工具箱,很多其它模块都需要调用和共享它。测试模块中包含了无数的回归测试语句,用来检查数据库代码的每个细微角落。这个模块是sqlite性能如此可靠的原因之一。

原文地址:https://www.jb51.cc/sqlite/201841.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐