SQLite 小调研

SQLite 小调研,第1张

概述一、 概况: SQLite 是 D. Richard Hipp 于 2000 年采用 C 语言编写的一个轻量级、跨平台的关系型数据库,支持大部分 SQL92 标准(比如视图、事务、触发器、blob 数据类型等),支持弱类型数据存储,开源免费,现已被嵌入最新的 PHP5 中。在 SQLite的官方网站上,也可以看到 SQLite 逐渐被许多大公司采用,比如 Adobe、Apple、Firefox、G 一、 概况:

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 小调研全部内容,希望文章能够帮你解决SQLite 小调研所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1158739.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存