嵌入式数据库SQLite的原理与应用

  • 格式:pdf
  • 大小:180.60 KB
  • 文档页数:4

下载文档原格式

  / 4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式数据库SQLite的原理与应用

唐敏,宋杰

(安徽大学计算机学院,安徽合肥230039)

摘要:随着嵌入式技术的发展,在嵌入式系统中越来越多地用到数据库。首先介绍了嵌入式数据库的基本特点,进而详细介绍了一个简洁实用的嵌入式数据库——

—SQLite,包括SQLite的技术特性、体系结构以及基本的函数调用,着重介绍SQLite在arm-linux平台上的应用开发、交叉编译和移植过程。

关键词:嵌入式数据库;SQLite;arm-linux

中图分类号:TP392文献标识码:A文章编号:1009-3044(2008)04-10600-04

TheMechanismandApplicationsofSQLite

TANGMin,SONGJie

(TheComputerInstituteofAnhuiUniversity,Heifei230039,China)

Abstract:Withthedevelopmentofembedded-computingtechnology,manyembeddedsystemsdeployembeddeddatabase.Thebasiccharacteristicoftheembeddeddatabaseisfirstlypresented.Anexcellentembeddeddatabase-SQLiteissecondlytalked.Includingthedis-tinctivefeaturesandthearchitectureofit,howtouseSQLiteisthirdlydescribed.Theapplicationdeveloping,crosscompilingandportinginarm-linuxplatformarealsointroduced.

Keywords:embeddeddatabase;SQLite;arm-linux

1引言

嵌入式技术正在提供人们越来越多有趣而新颖的服务,在许多的嵌入式系统开发中都要用到数据库,比如电信交换机、消费类电子、办公自动化设备等高科技产品。SQLite是由D.RichardHipp开发的轻量级嵌入式数据库,它是世界上应用最广泛的嵌入式数据之一。它在国内的应用也越来越多,但目前国内介绍SQLite的文章很少,本文较详细地介绍了SQLite的特点,基本原理和使用方法。SQLite是开放源代码的,可以免费下载。下载的官方网址为www.sqlite.org,当前最新版本是3.5.6。

2嵌入式数据库

嵌入式数据库通常是与嵌入式操作系统及具体的应用集成在一起,无需独立运行数据库引擎,由程序直接调用相应的API就可实现对数据的存取操作。嵌入式系统的开发环境决定了其数据库的特点。

2.1体积适当

由于嵌入式系统自身的特点,对数据的存储和程序的运行都有较强的空间限制,所以嵌入式数据库首先应该保障的就是适当的体积。进一步来说就是占用尽量少的ROM、RAM及CPU的资源。

2.2功能齐备

嵌入式系统开发中,用户需求决定了需要一个大小适中、功能齐备的数据库来实现数据管理,这就使得开发人员要采用一个能够提供完备开发文档且易于开发的数据库技术。此外,在嵌入式设备中,数据库的管理对用户来说是透明的,这就要求此数据库能够自动完成启动初始化、日志管理、数据压缩、备份、数据恢复等功能;而且嵌入式设备经常有不可预料的硬复位,这就需要此数据库有高度的健壮性。

2.3可移植性

嵌入式系统的平台种类繁多,因此嵌入式数据库应有一定的可移植性,以适用于不同的软硬件平台。

收稿日期:2008-01-12

作者简介:唐敏(1976-),女,安徽大学计算机学院计算机应用专业硕士研究生,研究方向:嵌入式,嵌入式数据库技术;宋杰(1966-),男,安徽大学计算机学院副教授,博士学位,研究方向:嵌入式,生物信息学。

2.4代码开源

开源的代码在产品的开发过程中不仅可以减少开发成本,更重要的是为后期的维护完善和稳定运行都提供了最为彻底的解决方法。

3SQLite的技术特性

SQLite是一个轻量级的关系数据库,具有三级模式的结构体系,即用户模式、逻辑模式和存储模式。相对于传统数据库,SQLite具有更好的的实时性、系统开销小、底层控制能力强。SQLite能够高效地利用嵌入式系统的有限资源,提高数据的存取速度,增强系统的安全性,并具有如下特点:

(1)零配置。SQLite在使用前不需要安装设置,不需要进程来启动、停止或配置,不需要管理员去创建新数据库或分配用户权限,在系统崩溃或失电之后自动恢复。

(2)对标准SQL的支持。SQLite虽然简单,但其内嵌的SQL在很大程度上实现了ANSISQL92标准。特别是SQLite支持视图,触发器,支持嵌套SQL;SQLite还具有事务处理功能,自动维护事务的完整性、原子性等特性,支持实体完整性和参照完整性,充分满足了嵌入式应用开发的需求。

(3)无服务器。大多数SQL数据库引擎是作为一个单独的服务器进程被执行。访问数据库的程序使用某种内部进程通信(典型的是TCP/IP)与服务器通信,完成发送请求到服务器和接收查询结果的工作。SQLite不采用这种工作方式。使用SQLite时,访问数据库的程序直接从磁盘上的数据库文件读写。没有中间的服务器进程。

(4)精简性。当尺寸优化后,在不减少功能的情况下,整个SQLite库小于225KB。如果在编译时去掉一些不需要的特性,库的大小能被减小到170KB。IBM发行的CloudScape数据库引擎是2MB的罐文件,压缩后仍比SQLite大10倍;Firefox宣称其客户订制的库只有350KB,但是不包括数据库引擎;来自Sleepycat的BerkeleyDB库是450KB,并且删去了SQL支持。通过比较可知:SQLite是非常小的。

(5)简单的访问。一个SQLite数据库是一个单独的普通磁盘文件,能够被定位在路径层次的任何地方。如果SQLite能读写磁盘文件,则它也能访问数据库。大多数SQL数据库引擎趋向于把数据存为一个大的文件集合,通常这些文件在一个标准的定位中,只有数据库引擎本身能访问它。

(6)可变长度的记录。一般的SQL数据库引擎在表中为每一个记录分配一个固定的磁盘空间数,SQLite只使用一个记录中实际存储信息的磁盘空间数。显然,这会使数据库非常小,同时,由于在磁盘上移动的信息很少,也使数据库很快。

(7)数据类型

SQLite最大的特点在于其数据类型为无数据类型(typelessness)。这意味着可以保存任何类型的数据到所想要保存的任何表的任何列中,无论这列声明的数据类型是什么。虽然在生成表结构的时候,要声明每个域的数据类型,但SQLite并不做任何检查。开发人员要靠自己的程序来控制输入与读出数据的类型。这里有一个例外,就是当主键为整型值时,如果要插入一个非整型值时会产生异常。

(8)使用虚拟机在SQLite中使用虚拟机对于库的发展有很大的好处。虚拟机在前端与后端之间准备了一个好的连接。虚拟机对于它所编译的每一个声明使开发者看起来清楚且简单易读的,这在调试时有帮助。依赖于它的编译,SQLite也有跟踪虚拟机执行打印执行指令和它执行结果的能力。

(9)可靠性较好。SQLite有良好注释的源代码,并且有着98%以上的测试覆盖率,有一支专业技术队伍对系统进行测试与维护工作。并且配备独立的命令行程序方便管理数据库。

4SQLite的体系结构

SQLite数据库是D.RichardHipp用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB,全部源代码约3万行。SQLite采用模块化的设计,主要由4个部分组成:内核(Core)、SQL编译器(SQLCompiler)、后端(Backend)以及附件(Accessories)。内部结构如图1所示。

SQLite的接口是一些已经编写好的C库,即使使用不同语言的API,在底层仍然使用C库执行。SQL语句通过接口进入到高效的SQL编译器,由标记处理器(tokenizer)分解成柠檬分析器(parser)可以识别的各个标志符,然后由分析器重新组合标志符并调用代码生成器(codegenerator)生成虚拟机器码,交由虚拟机(virtualmachine)去执行,最终完成SQL语句指定的任务。虚拟机是SQLite内部结构的核心,不仅完成与数据操作相关的全部操作,而且还是客户和存储之间信息进行交换的中间单元。数据库按照B树(B-tree)的形式存储在磁盘上,通过可调整的页面缓冲(pager)获得对数据的快速查找和存储。为了方便移植,SQLite使用一个抽象层接口(OSinterface)与不同操作系统进行对接。

5SQLite的开发技术

5.1命令行程序的使用

在http://www.SQLite.org/download.html页中有PrecompiledBinariesForWindows(在此我们以Windows操作系统为例)这个标题下面有sqlite-3_x_y.zip(x,y表示小版本号)后面的注释为Acommand-lineprogramforaccessingandmodifingsqlitedatabases。下载并解压sqlite-3_x_y.zip文件,解压后的文件是一个sqlite3.exe文件,将该可执行文件放到安装操作系统的目录下既可。运行cmd命