一、 概况:

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 之类的嵌入式数据库的易于使用性可以加快应用程序的开发,并使得小型应用程序能够完全支持复杂的 SQL。这一点对于对于小型设备空间的应用程序来说尤其重要。
嵌入式数据库对于加快应用程序开发也很重要,尤其是在用于数据库抽象层(例如PEAR::DB或ezSQL)时。最后,SQLite 正在积极开发中,未来一定会有新的功能,会对开源社区更有用。

SQLite 小调研的更多相关文章

  1. SQLite 数据库调研

    SQLite数据库的特点(转载的): ★技术上的优点和特性 SQLite是一个轻量级.跨平台的关系型数据库.既然号称关系型数据库,支持SQL92标准中常用的玩意儿(比如视图.事务.触发器等)就是理所当 ...

  2. ibatis集成Sqlite:小数据库也有大作用

    作者:Vinkn 来自http://www.cnblogs.com/Vinkn/ 一.简介 Ibatis简介: Ibatis是一个类似于Hibernate的数据库ORM(对象关系映射,通俗点就是将数据 ...

  3. sqlite小知识

    删除数据时,由于缓存关系,数据了文件大小不会一下子减小,可以通过执行vacuum;或新建表时使用自动整理大小来实现. sqlite的大小理论上可以达到140T. 暂时,使用C的api,只能使用不是.开 ...

  4. MySQL 小调研

    一. 概况: MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL ...

  5. Level DB 小调研

    一. 概况: 1. 背景: 随着信息技术的高速发展,数据存储量和流量呈现爆炸式增长.目前百度统计日 PV(日点击量)已超过 75 亿次,中国网民在百度上进行50 亿次的搜索请求,百度贴吧日 PV 十亿 ...

  6. Fog of War小调研

    看起来LOL和DOTA2都用的是格子来做的战争阴影,并且是用PP做的.

  7. Redis 小调研

    一. 概况: Redis是一款开源的.网络化的.基于内存的.可进行数据持久化的Key-Value存储系统.它的数据模型建立在外层,类似于其它结构化存储系统,是通过Key映射Value的方式来建立字典以 ...

  8. Neo4j 小调研

    一. 概况: 在图计算中,基本的数据结构表达式是:G= ( V,E ),V=vertex( 节点 ),E=edge(边) .图数据库中数据模型主要以节点和关系(边)来体现,也可以处理键值对.数据具有如 ...

  9. Elastic Search 小调研

    一.概况: Elastic Search 是一个基于Apache Lucene™工具包的开源搜索引擎.无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库 ...

随机推荐

  1. 大型项目必备IPC之Binder机制原理(一)

    阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680 摘要 Binder是Android系统进程间通信(IPC)方式之一.Li ...

  2. 在规定的时间内出现动画.html

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. Java中HashMap与ConcurrentHashMap的区别

    从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心. 在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从 ...

  4. 微信小程序の条件渲染

    <view> 今天吃什么 </view> <view wx:if="{{condition==1}}">饺子</view> < ...

  5. strxfrm - 转换字符串

    总览 (SYNOPSIS) #include <string.h> size_t strxfrm(char *dest, const char *src, size_t n); 描述 (D ...

  6. STM32中使能时钟的目的

    首先强调:时钟使能必须在外设初始化之前!!!!!!! 在这引用一个解释, “ARM的芯片,外设通常都是给了时钟后才能设置它的寄存器(即才能使用这个外设). STM32.LPC1XXX等等都是这样,这么 ...

  7. Python内部变量与外部变量

    def outer(): x = 'outer x' def inner(): x = 'inner x' print(x) inner() print(x) # 这里的`x`与`x = 'outer ...

  8. Hbase速览

    一.概述 理解为hadoop中的key-value存储,数据按列存储,基于HDFS和Zookeeper 1.应用 2.场景 适用场景: 存储格式:半结构化数据,结构化数据存储,Key-Value存储 ...

  9. 质数密度+思维——cf1174D

    /* 构造 n个点的无向图,无重边自环 边数e也是质数 点的度数也是质数 */ #include<bits/stdc++.h> #include<vector> using n ...

  10. 基于mybatis-plus的代码生成

    基于mybatis-plus的代码生成 前言 随着敏捷开发模式的推广,伴着日益增长的需求,日常工作中我们越来越注重效率和便捷性.今天我们就来探讨下如何自动生成代码,准确地说是如何依赖数据库生成我们的e ...