欢迎使用优快云-markdown编辑器

本文介绍了 SQLite 数据库的体系架构,包括编译器、虚拟机和后端等关键组件的功能和工作原理。详细阐述了 SQLite 的执行流程及核心 C/C++ 接口,帮助读者理解 SQLite 如何高效地处理 SQL 语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQLITE学习总结(1)

SQLite体系架构


SQLite体系架构
SQLite体系结构

 SQLite整个系统采用模块化的设计,主要包括三个子系统,编译器、虚拟机、后端(包括八个独立的模块)。
 编译器(Compiler)
在编译器中
 分词器(Tokenizer)–当执行一个包含SQL语句的字符串时,接口程序把字符串传递给Tokenizer,将原有字符串分割成一个个标识符,并将这些标识符传递给分析器。
 分析器(Parser)– 是在指定上下文中赋予标识符具体的含义。在SQLite中使用语法分析器Lemon,针对SQL进行语法检查,然后再转化为分层的数据结构—语法树。
 代码生成器(Code Generator)– 代码生成器针对语法树进行处理,生成SQL对应的“汇编语言”,最后由虚拟机执行。
 虚拟机(Virtual Machine)
 虚拟机是针对真实计算机资源的一个抽象,它为语言程序提供了一套完整的计算机接口。虚拟机是SQLite的核心,它的上层模块和下层模块都是为它服务。用户程序发出SQL语句请求,在经过编译处理后,生成字节代码程序,然后由虚拟机解释执行,在虚拟机执行的过程中,又会调用B-Tree模块相关接口,并输出执行的结果。


这里写图片描述

虚拟机指令格式

操作码P1P2P3P4P5

所有SQL指令,详见[SQL字节码引擎]

 后端(BackEnd)
后端主要包括B-Tree,页面高速缓存(page cache)和OS接口,B-Tree主要功能就是索引,它维护各个页面之间复杂关系,便于快速查找数据,而页面高速缓存主要作用就是通过OS接口在B-Tree和Disk之间传递页面。
 B-Tree – 数据库、数据库中的每个表和索引都以一颗单独的B-Tree单独存储在磁盘中。
 页面高速缓存 – B-Tree模块以固定大小数据块形式从磁盘上请求信息,页面高速缓存负责读、写和缓存这些数据块。
 

SQLite执行流程和接口

1. 打开、关闭数据连接

sqlite3_open — 该函数创建数据库连接对象sqlite3,起
到构造器的作用
sqlite3_close — 该函数删除对象sqlite3,起到析构的作用

int sqlite3_open();
int sqlite3_open_v2();
int sqlite3_close(sqlite3*);  
int sqlite3_close_v2(sqlite3*);  
2. 编译SQL

sqlite3_prepare_v2 — 该函数将SQL文本编译成字节码。同时创建一个prepared statement对象sqlte3_stmt,起到构造器的作用
(其中sqlite3_prepare已经不再推荐使用)

3. 执行SQL

sqlite3_step — 该函数是虚拟机的接口,用来运行包含在
sqlite_statement中的字节流。
sqlite3_exec — 该函数其中封装了sqlite3_prepare_v2
sqlite3_stepsqlit3_finalize,可以直接通过一个函
数执行多条的SQL语句。

4.获取数据采集结果
5.对象销毁与重用
6.SQL语句绑定参数

数据库连接对象和SQL语句对象由下面几个核心的C/C++接口来控制:
sqlite3_open()
sqlite3_prepare()
sqlite3_step()
sqlite3_column()
sqlite3_finalize()
sqlite3_close()

通常交互的流程如下:
1.调用sqlite3_prepare_v2来编译生成指令流,返回一个sqlite3_stmt对象,其实这个对象就是vdbe对象。
2.调用sqlite3_bind_*来将参数传递给vdbe,
3.调用sqlite3_step进行执行,这时候会启动虚拟机执行一条条指令,直到遇到中断或者停止指令为止
4.调用sqlite3_column_*来获取上一步准备好的结果集
5.调用sqlite3_finalize,销毁vdbe对象,结束这次执行。

SQLite源代码文件结构

SQLite文件结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值