SQLite系统构架及虚拟机分析
来源: 作者: 发布时间:2015-08-20 07:50:49 浏览量:step()函数,这是和内部的虚拟机联系非常紧密的两个函数,也是了解SQLite虚拟机的两个点。sqlite3_prepare_v2()完成的是将SQL语句提交给SQL编译器,编译成VDBE指令程序,sqlite3_step()将驱动VDBE执行指令程序。
从应用上来说,这仅仅是最简单的数据库应用框架,更多的接口信息可以查看官方的文档。
3.2 VDBE程序分析
在官方提供的下载中,有编译好的命令行可执行程序,可以作为完全的SQLite数据库管理工具。同时,它也考虑了一些Debug和Test功能,可以利用它们深入了解SQLite的内部机制。可以利用SQLite命令行程序中的explain命令查看由代码生成器生成的中间代码的形式,这只需要在相应的SQL代码前面加上explain就可以了。如以搜索的命令行显示(如图2所示,箭头表示实际执行顺序):
图2中,“addr”列是虚拟机的地址编号,并不是指令执行的顺序,由于跳转指令的存在,用箭头标示出了指令运行的实际顺序,也可以在SQLite编译时指定相应的选项,然后利用指令“pragma vdbe_trace=on;”详细地看到指令的运行过程和堆栈的变化情况。
指令0~指令12都是对SQLite数据库内部的准备:由指令1跳转到指令10,指令10(Transaction)开始一个事务,指令11(VerifyCookie)在执行一个指令前检查数据库模式是否发生了变化,当发生了变贴片绕线电感化时要重置,指令12(TableLock)将要读的数据库表锁起来,指令13(Goto)跳转到指令2。
从指令2开始是实际的对数据库的操作了。指令2(OpenRead)会打开一个数据库表的只读游标,P1作为这个游标的标志,P2是打开的数据库表的根页(root page),P3==0表明是主数据库,P4表明数据库有两列,P5说明是以P2的值作为根页。(OpenRead指令的各个操作数还可以有其他含义,这里只是针对这条SQL语句的解释,请查看技术文档。)指令3(Rewind)~指令7(Next)完成了对所有查询数据的遍历。指令8(Close)关闭游标,指令9(Halt)结束这个VDBE程序。
VDBE对上层提供的就是这样的接口,而对下层将是调用相应的接口实现相应的功能,并由此完成模块上的解耦合。
由VDBE的定义、代码分析及以上的实验,可以总结出SQLite的整体构架:
外部调用SQLite接口函数sqlite3_prepare(), SQL语句通过SQL编译器生成对应的VDBE指令程序;
内部调用sqlite3_step()驱动,内部执行sqlite3VdbeEx-
ec(),switch-case语句执行相应指令。底层通过B-Tree和Pager实现对磁盘数据库文件的管理,如图3所示。
在实际应用中,可以设计一个面向应用的指令集,利用程序虚拟机设计中间抽象层,提高平台通用性。同时程序虚拟机也为语言虚拟机、系统虚拟机及安全沙盒等技术提供了技术基础。
参考文献
[1] OWENS M.The definitive guide to SQLite[M].Apress,2006.
[2] KREIBICH J A.Using SQLite[M].O'Reilly Media,2010.
[3] 李蔚,陈亚峰.嵌入式数据库SQLite及其应用研究[J].沿海企业与科技,2010(10):45-47.
[4] 杜国祥,石俊杰.SQLite嵌入式数据库的应用[J].电脑编程技巧与维护,2010(14):43-46.
新手求教protel99se在画PCB时铜皮导线是直接用画线工具然后设置合适的线宽来画,还是用画线工具划出不规则线路(多边形)然后填充成一条线路?根据自己选择适合的,什么事情不可能是一次性就能画得好的,
嵌入式软件与硬件的集成测试过程研究 引言软件质量即业务生命。软件测试项目已经变得比以往任何时候都复杂和困难。1979年,Glenford Myers在《The Art of Software Testing》一书中提出 测试的目的是证
开关电源技术发展历程的十个关注点 4月08日 第三届·无线通信技术研讨会 立即报名 12月04日 2015•第二届中国IoT大会 精彩回顾 10月30日ETF•智能硬件开发技术培训会 精彩回顾 10月23日ETF•第三届 消费
大电流电感