SQLite - 体系结构

一、简介

SQLite主要由如图几种组件构成。

SQLite运行过程:

  • SQL编译器将SQL语句翻译为bytecode
  • 虚拟机(调用B-Tree引擎)执行bytecode

外部相关接口:

  • sqlite3_prepare_v2()和相关接口负责编译SQL语句为bytecode

  • sqlite3_stmt对象包含编译SQL语句后的bytecode

  • sqlite3_step()接口将bytecode转交给虚拟机执行。

image

二、组件介绍

2.1.接口(Interface)

大部分SQLite的接口实现在源文件main.clegacy.cvdbeapi.c中。为避免命名域冲突,外部接口/变量前缀为sqlite3_,拓展接口/变量前缀为sqlite3xxx_

注:能够使用nm sqlite3 | grep sqlite3_来查看外部接口函数名。

3.1.词法分析器(Tokenizer)

首先,SQL语句通过词法分析器产生一系列词素(tokens),然后调用语法分析器(Parser)依次处理tokens。相关源文件为tokenize.c

注:SQL编译器部分实现需编译原理相关知识。

3.2.语法分析器(Parser)

token通过语法分析器分析以生成语法树。

相关源文件为parse.y,由Lemon parser generator(一种使用LALR(1)文法的语法分析器)使用。

3.3.代码生成(Code Generator)

当语法树解析完成,通过代码生成器分析语法树,生成bytecode

相关源文件:attach.cauth.cbuild.cdelete.cexpr.cinsert.cpragma.cselect.ctrigger.cupdate.cvacuum.cwhere.cwherecode.cwhereexpr.c

3.4.Bytecode引擎(Bytecode Engin)

Bytecode引擎是用于运行bytecode的虚拟机。

相关源文件:vdbe.cvdbe.h

3.5.B树(B-Tree)

SQLite数据库使用B-Tree算法在磁盘存储数据。

相关源文件:btree.c

3.6.页缓存(Page Cache)

B-Tree从磁盘获取的数据大小固定,遂需要页缓存机制读、写和缓存这些页。

相关源文件:pager.cpager.h

注:类比操作系统物理内存分页管理机制。

3.7.操作系统接口(OS Interface)

SQLite使用VFS来完成磁盘读写操作。

3.8.实用工具(Utilities)

提供一些算法等工具支撑,例如内存分配,hash table实现等。

相关源文件:util.c

3.9.单元测试(Test Code)

测试代码。

相关源文件:src/test做前缀的文件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • SQLite3 API 包括很多函数,但是只有大概8个函数是实际处理连接、查询、断开与数据库连接所必需的。 一、查...
    明若晴空阅读 1,279评论 0 0
  • 本文译自《Architecture of SQLite》 介绍 这篇文档描述了SQLite库的架构。如果想理解SQ...
    NJUShenbin阅读 2,341评论 0 1
  • 这个SQLite快速入门教程教你如何有效地开始学习并使用SQLite。通过本教程的实践操作学习之后,相信你应该可以...
    易百教程阅读 36,213评论 1 67
  • 使用的过程根据使用的函数大致分为如下几个过程: sqlite3_open() sqlite3_prepare() ...
    浪尖ON的水滴阅读 1,703评论 2 2
  • 莫做“巧嘴媳妇” 有则笑话,说一个巧嘴媳妇吃饭时,先给公爹盛一碗。公爹吃了一口,称赞道:“今天的饭很香。” 巧嘴媳...
    小山一石阅读 441评论 0 0