SQLite数据库的体系结构(翻译自sqlite.org)
SQLite数据库的体系结构(翻译自sqlite.org) 1 简介 2 接口 sqlite3_get_table()函数在table.c中实现,sqlite3_mprintf()在printf.c中实现,sqlite3_complete()是在tokenize.c中实现的。Tcl接口 在tclsqlite.c中实现的。关于SQLite的C接口更完整的信息在http://www.sqlite.org/capi3ref.html中描述了。 sqlite3_开始的符号,形成了SQLite的API。 3 词法分析器 元,然后把词法单元传递给语法分析器,词法分析器是在tokenize.c文件中实现,这个代码是手编的,而不是使用lex之类的工具生成的。 这两种方法都试过,发现在词法分析器中调用语法分析器更好。 4 语法分析器 (1)工具产生器生成的。Lemon和YACC/BISON工具差不多,但是Lemon使用一种不同的输入语法,这种语法更难以出错。Lemon能产生一个可重入 和线程安全的语法分析器,Lemon定义了一种非终结符析构器,以致在语法出现错误时不至于出现内存泄漏。Lemon分析器的输入文件在parse.y 中定义。 5 代码生成器 生成器包含在许多文件中:attach.c,auth.c,build.c,delete.c,expr.c,insert.c,pragma.c,select.c,trigger.c,update.c, vacuum.c 和 where.c。这些文件就是我们的魔法发生的地方。expr.c处理表达式的代码生成,where.c处理SELECT,UPDATE和DELETE语句中的 WHERE子句的代码生成,attach.c,trigger.c update.c和vacuum.c处理与其名字相同的SQL语句的代码生成 ,这其中的每个文件在必要时都调用expr.c和where.c中的函数。其它的SQL语句在build.c中实现,auth.c文件实现sqlite3_set_authorizer() 函数的功能。 6 虚拟机 个抽象的计算引擎,这个计算引擎用来操作数据库文件。虚拟机有一个栈用于保存计算的中间状态,每条指令包括一个操作码和最多三个操作 数。虚拟机在vdbe.c中实现。虚拟机有它自己的头文件:vdbe.h文件定义了虚拟机和SQLite库的接口,vdbeInt.h文件定义了虚拟机的结构。 vdbeaux.c文件中包含一些虚拟机和接口模块使用的工具。vdbeapi.c文件包含了虚拟机的外部接口,例如sqlite3_bind_... 之类的函数。字符 串,整数,浮点数,BLOB类型都被存在一个名为Mem的内部对象中,这个内部对象在vdbemem.c文件中实现。 coalesce(),count(),substr()等等,在func.c中实现。日期和时间转换函数在date.c中实现。 7 B树 件中。该数据库文件格式的细节在btree.c文件开始部分的注释里详细描述。 8 页缓存 缓存也提供了回滚和原子提交的功能抽象和数据库文件的锁操作。B树驱动程序从页缓存中取得页,并且通知页缓存程序何时修改,提交或回滚 操作,页缓存处理所有的这些麻烦细节,确保请求被快速,安全和高效地处理。 9 操作系统接口 尤其自己的实现:os_unix.c是Unix的,os_win.c是windows系统的,等等。每个操作系统相关的实现尤其自己的头文件:os_unix.h,os_win.h 等等。 10 工具程序 含Unicode转换函数。SQLite有它自己的printf()函数实现,这在printf.c中定义,和随机数函数实现,这在random.c中实现。 11 测试代码 模拟验证电源失效后的页缓存机制的灾难恢复能力。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |