美文网首页
SQLite - 体系结构

SQLite - 体系结构

作者: Coc0 | 来源:发表于2020-01-08 18:07 被阅读0次

    一、简介

    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做前缀的文件。

    相关文章

      网友评论

          本文标题:SQLite - 体系结构

          本文链接:https://www.haomeiwen.com/subject/hjisactx.html