前言
之前文章都一直在讲SQLite的API接口和事务,这篇文章就来讲一讲SQLite VFS的一些源码部分,在官网(www.sqlite.org/vfs.html)上有关于VFS的详细文档也参考,如果本人看的不过瘾的话,可以自行前往。
VFS也就是所谓的虚拟文件系统,因为sqlite3是夸平台的,所以运行在不同的平台上需要兼容不同的文件系统,这就是VFS的任务了,VFS就是对不同的文件系统做一个统一的接口。
简介
我们先看一张SQLite软件层次结构:
SQLite库的内部层次结构就是上图的组件栈。Tokenizer,Parser和Code Generator组件用于处理SQL语句并将它们转换为虚拟机语言或字节代码的可执行程序。
简单地说,这三个前三层实现了 sqlite3_prepare_v2()。前三层生成的字节代码是预准备语句。我在第2篇文章就已经讲到过SQlite学习(C/C++接口介绍),虚拟机模块负责运行SQL语句字节代码。
B-Tree模块将数据库文件存储到具有有序键和具体对数性能的多个键/值存储中(其实也就是B+树)深入理解SQLite(3)体系架构。
Pager模块负责将数据库文件的页面加载到内存中,用于实现和控制事务,以及创建和维护防止崩溃或电源故障后数据库损坏的日志文件。
OS接口是一个抽象,它提供了一组通用的实现方式,使SQLite能够适配不同的操作系统。OS层位于最底层,是和系统的磁盘文件存储直接打交道,在OS层里封装了VFS。简单地说,底部的四层实现了 sqlite3