设为首页 收藏本站
查看: 1115|回复: 0

[经验分享] 第一章-SQLite介绍

[复制链接]

尚未签到

发表于 2016-11-28 11:43:31 | 显示全部楼层 |阅读模式
  一、 简介
  1. SQLite是一款嵌入式数据库,它没有独立运行的进程,它与所服务的应用程序在应用程序进程空间内共生共存。它的代码与应用程序代码也是在一起的,或者说嵌入其中,作为托管它的程序的一部分。
  2. 数据库服务器在程序中的好处是不需要网络配置和管理。
  3. SQLite是开源的,不受许可证费用约束,而且是专门为嵌入式设计的产品。
  二、 体系结构
  SQLite 拥有一个简洁的、模块化的体系结构,并引进了一些独特的方法进行关系型数据库管理。它由可以划分为3个子系统(编译器(Compiler)、核心(Core)、后端(Backend))的8个独立模块组成(详见下图)。这些模块将查询过程划分为几个独立的任务,就像在流水线上工作一样。在体系结构栈的顶部编译查询语句,在中部执行,在底部处理存储并与操作系统交互。
   DSC0000.png
  
下面让我们根据不同模块展开介绍。

  • 接口(Interface)
接口处于栈的顶端,由SQLite C API组成。程序、脚本语言还有与SQLite交互的库文件最终都是通过它与SQLite交互的。从表面上理解,这里是开发者、管理员等与SQLite通信的地方。


  • 编译器(Compiler)
编译过程从词法分析器(Tokenizer)和语法分析器(Parser)开始。它们协同处理文本形式的结构化查询语句(Structured Query Language, SQL),分析其语法有效性,然后转化为底层能更方便地处理的层次化数据结构。SQLite词法分析器是手动编码实现的,它的语法分析器是由SQLite特定的语法分析生成器Lemon(专门有一本书讲解此生成器)产生的。

代码生成器(Code Generator)将语法树翻译成一种SQLite专用的汇编代码,这些汇编语言由一些最终由虚拟机执行的指令组成。代码生成器的唯一工作是将语法树转换为完全由这种汇编语言编写的微程序并交给虚拟机处理。

  • 虚拟机(Virtual Machine)
架构栈的中心部分是虚拟机(Virtual Machine),也叫做虚拟数据库引擎(Virtual DataBase Engine,VDBE)。VDBE是基于寄存器的虚拟机,在字节码上工作,这使得它可以独立顶层操作系统、CPU和系统体系结构。VDBE的字节代码(称为虚拟机语言)由100多个被称为操作码(opcodes)的可能的任务构成,所有这些操作都是围绕数据库进行的。
VDBE是一个专为数据处理设计的虚拟机。它的指令集中所有的指令或者用来完成具体的数据库操作(比如打开一个表的游标、做记录、提取一列或者开始一个事务等),或者以某种方式控制栈为完成这些操作做准备。SQLite中的所有SQL语句----从选择和更新记录到创建表、视图以及索引----都是首先编译成虚拟机语言,形成一个独立的定义了如何完成给定的命令的指令集。

VDBE是SQLite的核心,它之前的所有模块都是用于创建VDBE程序的,它之后的所有模块都是用于执行VDBE程序的,每次执行一条指令。


  • 后端(Backend)
后端由B-tree、页缓存(page cache)以及操作系统接口组成。B-tree和pager一起作为信息代理。它们使用的数据源是数据库页,这些页是具有相同大小的数据块、就像用于运输的集装箱。页里面的"货物"是表示信息的大量位(bit),这些信息包括记录、字段和索引项等。B-tree和pager不需要知道信息的内容,它们只负责移动和排列这些页。
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很容易移植到不同的操作系统上。

OS接口(OS Interface)的下面就是具体要存取的数据。

总体来看,SQLite分为三个子系统,里面包含了八个独立模块。

  • 接口(Interface)
  • 词法分析器(Tokenizer)
  • 语法分析器(Parser)
  • 代码生成器(Code Generator)
  • 虚拟机(Virtual Machine)
  • B-Tree
  • Pager
  • OS接口(OS Interface)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-306695-1-1.html 上篇帖子: android sqlite 命令 下篇帖子: 应用JDBC连接SQLite
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表