当前位置:首考文秘网>范文大全 > 公文范文 > 嵌入式数据库SQLite及其应用研究

嵌入式数据库SQLite及其应用研究

时间:2023-05-18 11:20:03 公文范文 来源:网友投稿

[摘要]嵌入式数据库SQLite可以高效地管理和存储数据。文章分析SQLite 数据库的技术特点、体系结构和应用范围,重点研究Sqlite 数据库的编译、移植和嵌入式数据库应用程序的开发等内容。

[关键词]嵌入式;SQLite;移植

[作者简介]李蔚,郑州轻工业学院副教授,硕士生导师,博士,研究方向:数据库与信息集成,内存数据库,河南郑州,450002;陈亚峰,郑州轻工业学院硕士研究生,研究方向:嵌入式实时数据库系统,河南郑州,450002

[中图分类号] TP393[文献标识码] A[文章编号] 1007-7723(2010)10-0045-0003

一、引言

随着现代计算机技术的飞速发展,嵌入式系统成为当前IT行业最热门的焦点之一,已被广泛应用于各个领域。在嵌入式系统中,需对各种数据进行存储和管理,对数据的处理通常可采取文件方式和数据库方式。较文件管理系统,嵌入式数据库是首先考虑的选择。在数据库方式中,由于数据和程序相互独立,通过事务来进行调度与并发控制,可有效地对数据进行存取、查询等共享操作;同时借助于数据库所具有的安全性检验、完整性检查等多种安全措施,可确保系统具有较好的整体性能[1]。嵌入式数据库通常是与嵌入式操作系统及具体的应用集成在一起,无须独立运行数据库引擎,由程序直接调用相应的API就可实现对数据的存取操作。嵌入式系统的开发环境决定了其数据库要具备以下特点[2][3]:

1.DBMS的功能够用而不多余,这主要是由于嵌入设备资源紧张。

2.系统稳定性好、可靠性高,这样才能符合嵌入设备应用群体的特点。

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

4.DBMS可裁剪或可定制,以适应嵌入式设备种类繁多、设备之间的性能差别极大的特点。

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

本文分析sqlite 数据库的技术特点、体系结构和应用范围,重点研究SQLite 数据库的编译、移植和嵌入式数据库应用程序的开发等内容。

二、SQLite 数据库的技术特点

SQLite 是D. Richard Hipp 开发出来的用一个小型C库实现的一种强有力的嵌入式关系数据库。它提供了对ANSI SQL92 的大多数支持:支持多表、索引、事务、视图、触发和一系列的用户接口及驱动。SQLite实现了完备的、可嵌入的、零配置的SQL数据库引擎,非常适合应用于嵌入式应用开发中。它的主要特点包括:

1.SQLite 的版权允许无任何限制的应用,包括商业性的产品。

2.支持ACID 事务,支持事务的并发执行。

3.零配置——无须安装和管理配置。

4.存储在单一磁盘文件中的一个完整的数据库,数据库文件可以在不同字节顺序的机器间自由共享。

5.支持数据库大小至2TB。

6.足够小、全部源码大致3 万行C 代码,编译以后完整配置的小于250KB,忽略一些可选特性的少于150KB。

7.比目前流行的大多数据库运行速度快。

8.比较完善的数据库恢复策略,即使在系统崩溃和掉电以后也能够自动完成启动初始化和数据恢复。

三、SQLite体系架构

SQLite体系结构如图1所示。主要由以下几个主要的子系统组成:

1.接口(Interface)是一个C语言库,它可以接受不同语言的API,但在底层执行的都是C语言库。

2.SQL 命令处理器(SQL Command Processor) 由三个独立的步骤组成:记号处理器(Tokenizer)、语法分析器(Parser)、代码生成器(Code Generator)。Tokenizer 其实就是一个专门针对SQL语法手工编写的词法分析器,它要比通用的词法分析器工具Flex效率高得多;SQLite的语法分析生成器(lemon)是基于LALR(1),功能类似于yacc和bison,但是在嵌入式数据库中,lemon个头更小、速度更快,生成更高效的代码,它把词法记号(tokens)装配成完整的SQL语句;代码生成器(Code Generator)把语法分析器产生的SQL语句转变成虚拟机代码,交给虚拟机执行。

3.虚拟机(Virtual Machine)是为操作数据库文件而特定设计的,它实现一个抽象的计算机引擎。虚拟机用一个堆栈来存储中间指令代码(四元式),每一条指令包含一个操作码和三个操作数。

4.B - 树结构,用于存储数据库到磁盘,B - 树具有较高的存储效率和优越的索引结构,可以通过减少磁盘的查找来达到快速访问数据的目的。

5.页面缓冲(Page Cache)主要处理读、写以及B - 树存储机制所需的数字缓冲,包括为了保证事务原子性的回滚及提交操作所需的缓冲。

6.操作系统接口(OS Interface)主要是为了方便在不同平台的操作而执行的一个底层与操作系统有关的抽象层,是为了便于在POSIX(Portable Operating System Interface,是基于UNIX的)和Win32 操作系统之间进行移植。

7.效用(Utilities)主要解决内存分配、无类型字符串的比较问题,词法分析语法分析中的符号表的存放,以及SQLite专用的打印函数和随机数函数。

8.测试代码(Test Code)超过一半的SQLite功能可以在这里得到测试,并且模拟了系统崩溃时SQLite的故障恢复机制。

该体系结构的核心是虚拟数据库引擎(VDBE)。VDBE完成与数据操作相关的全部任务,并且是客户和存储之间信息交换的中间单元。从各个角度分析,它都是SQLite的核心。当SQL语句被分析后,VDBE便开始工作。代码生成器将分析树翻译成一个袖珍程序,随后这些袖珍程序又被组合成VDBE的虚拟机器语言表示的一系列指令。如此反复,VDBE执行每条指令,最终完成SQL语句指定的查询要求。

四、SQLite的主要应用场合

1.网站:在中小型网站中,SQLite的性能和一些大型数据库一样出色,而99.9% 以上的网站都是中小型网站。保守地说,访问量在每天10万次以下的网站,SQLite工作得相当出色。实验证明,访问量达到每天百万次,SQLite仍然能够胜任。

2.嵌入式设备:由于SQLite需要很少甚至不需要管理,故在嵌入式设备特别无人值守的场合,SQLite是一个很好的选择。SQLite可以应用在蜂窝电话、PDAs、GPS、机顶盒等消费电子中。

3.应用文件格式:SQLite使用在盘文件格式为桌面应用,例如财务分析工具、CAD包裹、保留程序的纪录,等等。临时触发器可以加到数据库中,以记录所有变动到一个(临时)undo/redo日志表。当用户实施undo/redo,这些变动可以重新被展示。使用这个技术,无限的深度undo/redo可以用很小的代码来实现。

4.替换特别磁盘文件:许多程序使用fopen ()、fread()和fwrite()创造和处理数据文件,作为这些特别数据文件的替换,SQLite运行得相当不错。

5.数据库教学:sqlite几乎不需要安装,只需拷贝可执行文件sqlite.exe到目标机即可运行。它的使用也极为简单,对于一般的学生而言,可以用它做各种SQL语句的练习。SQLite源代码的模块化很好,注释也非常详细,并且有很多文档供参考,对于想进一步研究关系数据库实现细节的学生,阅读SQLite源代码是个不错的方法。

五、SQLite在Windows平台VC6.0下的编译和运行

SQLite有Windows 和Linux两个版本,分别可以在Windows 和Linux平台下运行。将下载的Windows版本的SQLite软件包解压缩,即可得到SQLite源代码。打开VC6.0,新建工程,选择Win32 Console Application,工程名和地址可以任意,flatforms选项选择Win32,单击OK,工程类型选空工程,单击Finish,工程就建立好了。然后在project下拉菜单选择add to project,在选择Files,把SQLite源代码添加进去,然后编译,会提示一个错误“conopen include file: "tcl.h": No such file or directory”,把源文件中的tclsqlite.c删除,再重新编译、运行,程序顺利通过,生成可执行文件sqlite.exe。

六、SQLite在嵌入式操作系统μClinux 下的移植测试

SQLite 数据库应用的开发与桌面和企业级数据库应用开发的最大差别主要是嵌入式平台开发的特殊性。下面就SQLite 数据库在嵌入式Linux 下的移植和开发流程作简单的介绍。SQLite是一个通用的免费嵌入式数据库,为了将Sqlite 应用到S3C2410 + linux 环境中,首先需把SQLite移植到linux平台上,然后再将SQLite编译成linux 下的一个的普通应用程序,就可以通过嵌入式C 通过API 开发具体的应用程序。移植测试的主要步骤如下:

1.将下载的Linux版本的SQLite软件包解压缩到μClinux2distPuser 目录。

2.完成用户应用程序的如下几项设置:

(1)在μClinux2distPuserPMakefile、μClinux2distPconfigPConfigure. help 、μClinux2distPconfigPconfig. in 三个文件中查找“cpu”有关选项,然后在它的下面,加上Sqlite 项,把Sqlite 添加为μClinux 的一个新UserSettings 项。

(2)在μClinux 中修改sqlitePmain. mk、sqlitePsrcPos. c、sqliteP srcPshell. c 三个文件和添加sqlitePMakefile文件, 从而按照μClinux2distPDocumentationPadding2User2Apps2HOW T O 的说明把Sqlite 作为一个用户应用程序,将其做成一个Shell。

(3)通过make dep 、make lib- only、make user - only、makeromfs、make image 等操作编译μClinux 的Kernel , 并在μClinux2distPimages 下生成包含有Sqlit 的romfs 文件系统。

3.把含有Sqlite 应用程序的romfs 下载到S3C24102 μClinux 板上的P tmp 目录(此目录须是可读写的),运行Sqlite即可。现在sqlite 已经可以在arm2linux 下跑了起来,就可以创建一个test表测试,语句如下:

Sqlite > create table test (name varchar (20) ,num smallint) ;

Sqlite > insert into test values("NAME1",1) ;

Sqlite > insert into test values("NAME2",2) ;

Sqlite > select 3 from test ;

NAME1 | 1

NAME2 | 2

Sqlite > . tables

Test

Sqlite > . q

七、结语

本文主要介绍了SQLite 数据库的技术特点、体系结构、应用领域,以及在Windows和嵌入式Linux上的开发应用。SQLite的访问速度较快,产生的代码量也比较少,基于SQLite开发应用程序比较简单,在嵌入式应用中有很好的前景。

[参考文献]

[1]金恩海.嵌入式数据库系统设计与实现信息技术[J].2006,5(6).

[2]王京谦,万莅新.开源嵌入式数据库Berkeley和SQLite嵌入式数据库技术[J].单片机与嵌入式系统应用,2005,12(2).

[3]黄布毅,张晓华.基于ARM2Linux的SQLite嵌入式数据库技术[J]单片机与嵌入式系统应用,2005,32(4).

[4]2001年嵌入式系统及单片机国际学术交流会论文集[C].北京:北京航空航天大学出版社,2001.

[5]Jeffrey D. Ullman, Jennifer Widom. DATABASE SYSTEM IMPLEMENTATION.

[6]李刚,李蔚,张效尉.嵌入式嵌套实时事务模型研究[J].郑州轻工业学院学报,2009,31(3).

推荐访问:嵌入式 及其应用 数据库 研究 SQLite

版权所有:首考文秘网 2015-2024 未经授权禁止复制或建立镜像[首考文秘网]所有资源完全免费共享

Powered by 首考文秘网 © All Rights Reserved.。备案号:冀ICP备15026071号-91