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 可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库 ...
随机推荐
- @Validated和@Valid区别:Spring validation验证框架对入参实体进行嵌套验证必须在相应属性(字段)加上@Valid而不是@Validated
Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR- ...
- NOPI Excel 数据导入到数据库
/// <summary> /// 上传excel文件 并将文件数据导入到数据库 /// </summary> /// <param name="file&qu ...
- Ubuntu16.04+cuda9.0安装教程
1.安装NVIDIA驱动 首先去官网(http://www.nvidia.cn/Download/index.aspx?lang=cn)查找适配自己电脑GPU的驱动,我的电脑驱动版本如下: 执行如下语 ...
- npm 安装扩展模块时,因缓存报错的问题汇总
1.缓存报错问题一 : unexpected end of file 解决方法:运行:npm cache verify 清除缓存 2.缓存报错问题二 : errno -4048(网上一般说 ...
- myeclipse中出现The method xxx of type must override or implement a supertype
出现问题提示:The method xxx of type must override or implement a supertype? annotation:@Override的原因 查阅了一下资 ...
- 【记录】eclipse / STS 设置注释模版格式/导入注释模版格式
设置注释模板的入口:Window->Preference->Java->Code Style->Code Template 将如下保存在新创建的xml文件中,导入进去 < ...
- usb需要做的工作
1. QStringList qlist = var2.split('&', QString::SkipEmptyParts); if (qlist.size() >= 2) { usb ...
- 【leetcode】bash脚本练习
[192]Word Frequency Write a bash script to calculate the frequency of each word in a text file words ...
- js取整 - 优雅版(装逼必备)
var a = 2.98; var z1 = ~~a; var z2 = a | 0; var z3 = a>>0; console.log(z1, z2, z3); // 2, ...
- vue 表单输入绑定 checkbox
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...