SQLite 小调研
一、 概况:
SQLite 是 D. Richard Hipp 于 2000 年采用 C 语言编写的一个轻量级、跨平台的关系型数据库,支持大部分 SQL92 标准(比如视图、事务、触发器、blob 数据类型等),支持弱类型数据存储,开源免费,现已被嵌入最新的 PHP5 中。在 SQLite的官方网站上,也可以看到 SQLite 逐渐被许多大公司采用,比如 Adobe、Apple、Firefox、Google、Sun、Symbain 等。
它具有以下优点:
① 轻量级:SQLite 为进程内数据库引擎,嵌入运行于程序的进程空间,速度快。SQLite 全部的功能都包含在一个不到500KB 的动态链接库文件中。
② 绿色:SQLite 的核心引擎不依赖第三方的软件,编译链接进程序即可,无须“安装”。
③ 文件型数据库:SQLite 数据库中所有的信息都包含在一个文件内,类似于 Access,数据文件拷贝、备份方便。
④ 跨平台/可移植性:SQLite 除了支持主流常见的操作系统(Windows、Mac OS X、Linux),还支持很多嵌入式系统 (比如 Android、Windows Mobile、Symbin、Palm、VxWorks 等)。
⑤ 提供多种编程语言接口:SQLite 支持 C/C++、Java、Python、PHP、DOT.NET 等,提供了多种编程接口,适合混合语言编程,允许为 SQL 命令集动态添加自定义函数 (简单函数及聚集函数),而无需重新编译 SQLite 库。
至于缺点,SQLite 通过 OS 的文件锁实现库级锁,粒度很大,对并发控制、数据加密支持的不是太好,但是基于其开放源码的特性,用户可以自行加以改进。在创建索引 ( CREATE INDEX)和删除表 ( DELTE TABLE) 时明显比其他数据库慢。
SQLite 适合用于嵌入式便携设备 (如智能手机、PDA等),亦或是其他要求较低的桌面应用软件中,也可以考虑动态地嵌入到应用程序中,比如用于某些企业应用软件的本地磁盘格式文件或数据库。有经验的 SQL 用户还可以使用SQLite 命令行程序去分析各种混杂的数据集。
二、 原理简介:
SQLite 采用模块化程序设计,主要由 3 个子系统、8 个独立的模块构成,其体系结构如下图所示。

SQLite体系结构图
(1) 接口
由两部分组成: 核心 API (core API ) 和扩展 API (exten-sion API ),核心 API 的函数实现基本的数据库操作,扩展 API通过创建自定义的 SQL 函数去扩展 SQLite。
(2) 编译器
在编译器中,分词器和分析器对 SQL 语句进行语法检查,然后把它转化为底层能更方便处理的分层的数据结构- --语法树,然后把语法树传给代码生成器 (code generator ) 进行处理。而代码生成器根据它生成一种针对 SQLite 的汇编代码,最后由虚拟机执行。
(3) 虚拟机
架构中最核心的部分是虚拟机,或者叫做虚拟数据库引擎 VDBE,它和 Java 虚拟机相似,解释执行字节代码。VDBE的字节代码由 128 个操作码 (opcodes ) 构成,它们主要集中在数据库操作。它的每一条指令都用来完成特定的数据库操作 (比如打开一个表的游标) 或者为这些操作栈空间的准备(比如压入参数)。
(4) 后端
后端由 B-树,页缓存和操作系统接口 (即系统调用) 构成。B-tree 的主要功能就是索引,它维护着各个页面之间的复杂的关系,便于快速找到所需数据;pager 的主要作用就是通过 OS 接口在 B-tree 和 Disk 之间传递页面。
总而言之,SQLite作为一个轻量级的传统关系型数据库,具有内存开销小、速度快(甚至快于MySQL)、对嵌入式有很好的支持、兼容性强等优势。当前的SQLite已更新至SQLite3版本,兼容性和灵活性日益增强。一些能够真正表现 SQLite 优越性能的领域是 Web 站点,可以使用 SQLite 管理应用程序数据、快速应用程序原型制造和培训工具。
SQLite 小调研的更多相关文章
- SQLite 数据库调研
SQLite数据库的特点(转载的): ★技术上的优点和特性 SQLite是一个轻量级.跨平台的关系型数据库.既然号称关系型数据库,支持SQL92标准中常用的玩意儿(比如视图.事务.触发器等)就是理所当 ...
- ibatis集成Sqlite:小数据库也有大作用
作者:Vinkn 来自http://www.cnblogs.com/Vinkn/ 一.简介 Ibatis简介: Ibatis是一个类似于Hibernate的数据库ORM(对象关系映射,通俗点就是将数据 ...
- sqlite小知识
删除数据时,由于缓存关系,数据了文件大小不会一下子减小,可以通过执行vacuum;或新建表时使用自动整理大小来实现. sqlite的大小理论上可以达到140T. 暂时,使用C的api,只能使用不是.开 ...
- MySQL 小调研
一. 概况: MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL ...
- Level DB 小调研
一. 概况: 1. 背景: 随着信息技术的高速发展,数据存储量和流量呈现爆炸式增长.目前百度统计日 PV(日点击量)已超过 75 亿次,中国网民在百度上进行50 亿次的搜索请求,百度贴吧日 PV 十亿 ...
- Fog of War小调研
看起来LOL和DOTA2都用的是格子来做的战争阴影,并且是用PP做的.
- Redis 小调研
一. 概况: Redis是一款开源的.网络化的.基于内存的.可进行数据持久化的Key-Value存储系统.它的数据模型建立在外层,类似于其它结构化存储系统,是通过Key映射Value的方式来建立字典以 ...
- Neo4j 小调研
一. 概况: 在图计算中,基本的数据结构表达式是:G= ( V,E ),V=vertex( 节点 ),E=edge(边) .图数据库中数据模型主要以节点和关系(边)来体现,也可以处理键值对.数据具有如 ...
- Elastic Search 小调研
一.概况: Elastic Search 是一个基于Apache Lucene™工具包的开源搜索引擎.无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库 ...
随机推荐
- android service 样例(电话录音和获取系统当前时间)
关于android service 的具体解释请參考: android四大组件--android service具体解释.以下将用两个实例具体呈现Android Service的两种实现. 一个是st ...
- JS模拟实现题目(new debounce throwee 等)
模拟new实现 function newObject() { let obj = new Object(); let Con = [].shift.apply(arguments) obj.__pro ...
- CSS3中的transform转换属性
属性 transition-property 定义对象中参与过度的属性 transition-delay 延迟 transition-duration 持续时间 transition-timing-f ...
- Node.js中的fs文件系统
fs.stat 检测是文件还是目录 fs.mkdir 创建目录 fs.writeFile 创建写入文件 fs.appendFile 追加文件 fs.readFile 读取文件 fs.readdir 读 ...
- 聊聊动态链接和dl_runtime_resolve
写在前面 linux下的动态链接相关结构,重新回顾_dl_runtime_resolve的流程以及利用方法 动态链接相关结构 为了高效率的利用内存,多个进程可以共享代码段.程序模块化方便更新维护等,动 ...
- Ti 949 配置 948 i2c
如果不想用 远端 slave,只访问948 选 i2c pass through all =1 :i2c pass through =0/1 0x0c 0x17 0x9e 如果想用远端 sla ...
- 【前端优化】图片延迟加载Lazy-loading的原理与简单实现
1.什么是lazy-loading 图片"懒加载" 为img标签src设置统一的图片链接,而将真实链接地址装在自定义属性中. 所以开始时候图片是不会加载的,我们将满足条件的图片的s ...
- USACO18DEC Platinum
standing out from the field 给你n个串,对于每个串求出只包含在这个串中的本质不同的子串? 后缀自动机,建树,对于每一个点打上包含在哪个串中的标记. 叶子都是前缀,直接在sa ...
- mongodb 可视化工具
mongodb是用命令行输入的,有些人可能不太习惯,我自己找了下mongodb的一些可视化工具,发现了一款adminmongo很好用,这里介绍给你们用一下. github地址:https://gith ...
- 数据结构(c语言版,严蔚敏)第1章绪论
第1章严蔚敏