嵌入式数据库典型技术 SQLite和Berkeley.doc

上传人:滴答 文档编号:3448750 上传时间:2019-05-30 格式:DOC 页数:8 大小:100.50KB
下载 相关 举报
嵌入式数据库典型技术  SQLite和Berkeley.doc_第1页
第1页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、嵌入式数据库典型技术SQLite 和 Berkeley摘 要: 与常见的数据库相比,嵌入式数据库具有体积小、功能齐备、可移植性、健壮性等特点,本文分析和比较了典型的嵌入式数据库 SQLite 和 Berkeley DB。首先从体系结构、子系统间调用关系、任务执行过程等角度对 SQLite 和 Berkeley DB 进行了详细分析,然后重点从数据类型、存储方式、模式、数据库引擎和错误处理及加密功能等方面讨论了 SQLite 和 Berkeley DB 的异同点,最后列举了一个基于 ARMLinux 的 SQLite 应用实例。 关键词: SQLite、Berkeley DB、SQL、虚拟数据库

2、引擎(VDBE) 引言随着计算机技术与其它学科间的不断交融、渗透,数据库应用的范围更加深入和具体。那些仅适用于 PC 机,体积庞大、延时较长的数据库技术已不能满足针对性较强的嵌入式系统开发的需求。SOLite 和 Berkeley DB 是目前应用较广泛、技术较稳定的两种嵌入式数据库。然而,国内对嵌入式数据库的研究起步较晚,还没能引起更多人的关注。更多人熟悉那些基于 C/S 或 B/S 结构的关系型数据库来实现数据的存储、检索等功能。然而,在嵌入式系统中,由于软硬件资源有限,不可能安装庞大的数据库服务器,而用户的需求可能由一个简单的基于磁盘文件的数据库系统就能实现,这仅仅是利用了那些数据库的基

3、本特性。此时,对嵌入式数据库的研究就显得尤为重要了。1 嵌入式数据库嵌入式数据库通常是与嵌入式操作系统及具体的应用集成在一起,无需独立运行数据库引擎,由程序直接调用相应 的 API 就可实现对数据的存取操作。嵌入式系统的开发环境决定了其数据库的特点:1、 体积适当由于嵌入式系统自身的特点,对数据的存储和程序的运行都有较强的空间限制,所以嵌入式数据库首先应该保障的就是适当的体积。进一步来说就是占用尽量少的 ROM、RAM 及 CPU的资源。2、 功能齐备嵌入式系统开发中,用户需求决定了需要一个大小适中、功能齐备的数据库来实现数据管理,这就使得开发人员要采用一个能够提供完备开发文档且易于开发的数据

4、库技术。此外,国家 863 项目 2002AA714023,研究生精品课程资助 05531451在嵌入式设备中,数据库的管理对用户来说是透明的,这就要求此数据库能够自动完成启动初始化、日志管理 、数据压缩、备份、数据恢复等功能;而且嵌入式设备经常有不可预料的硬复位,这就需要此数据库有高度的健壮性。3、 可移植性嵌入式系统的平台种类繁多,因此嵌入式数据库应有一定的可移植性,以适用于不同的软硬件平台。4、代码开源开源的代码在产品的开发过程中不仅可以减少开发成本,更重要的是为后期的维护完善和稳定运行都提供了最为彻底的解决方法。2 SQLiteSQLite 是 D.理查德.希普用一个小型的 C 库开发

5、的一种强有力的嵌入式关系数据库管理体制。虽然功能较 Berkeley DB 稍显逊色,但它简单易学、速度较快,同时提供了丰富的数据库接口,提供了对 SQL92 的大多数支持:支持多表和索引、事务、视图、触发和一系列的用户接口及驱动。SQLite 的体系结构大体上可以分成八个主要的子系统,如图 1 所示。对数据库进行的各种操作都是按照此顺序,逐一执行的。顶层是标记处理器(tokenize)和分析器(parser)。SQLite 有自己高度优化的代码生成器,可以快速、高效地生产出代码。底部是经过优化的 B 树,这样有助于运行在可调整的页面缓冲上时,对磁盘的查找降低到最小。再往下是页面高速缓存,它作

6、用在 OS 的抽象层之上,这样的体系结构使数据库的可移植性变为可能。该体系结构的核心是虚 拟数据库引擎(VDBE)。VDBE 完成与数据操作相关的全部任务,并且是客户和存储之间信息交换的中间单元。从各个角度分析,它都是 SQLite 的核心。当 SQL 语句被分析后,VDBE 便开始工作。代码生成器将分析树翻译成一个袖珍程序,随后这些袖珍程序又被组合成 VDBE 的虚拟机器语言表示的一系列指令。如此反复,VDBE 执行每条指令,最终完成 SQL 语句指定的查询要求。SQLite 有以下特性:支持 ACID 事务、零配置无需安装和管理配置、存储在单一磁盘文件中的一个完整的数据库、数据库文件可以在

7、不同字节顺序的机器间自由共享、支持数据库大小至 2TB、足够小、全部源码大致 3 万行 C 代码,250KB、比目前流行的大多数据库运行速度快,提供了对事务功能和并发处理的支持、应用 Transaction 既保证了数据的完整性,也会提高运行速度,因为多条语句一起提交给数据库的速度会比逐一提交的方式更快、独立、没有额外依赖。3 Berkeley DBBerkeley DB 是由 sleepycat software 开发的轻量级嵌入式数据库,它不仅适用于嵌入式系统,而且可以直接连接到应用程序内部,和应用程序运行在同一地址空间。传统的数据库一般作为独立服务器工作,而 Berkeley DB 是软

8、件开发库,开发者将它嵌入到应用程序中,应用程序本身就是一个服务器,而只是利用嵌入式数据库开发来实现定制的数据库逻辑,避免了与应用服务器进程间通信的开销,因此 Berkeley DB 具有较高的运行效率,适用于资源受限的嵌入式系统。一般而言,Berkeley DB 数据库系统可以大致分为五个子系统,如图 2 所示。1、 存取管理子系统(Access Methods)该子系统为创建和访问数据库文件提供基本的支持。在没有事务管理的情况下,该子系统中的模块可单独使用,为应用程序提供快速高效的数据存取服务。2、 内存池管理子系统(Memory Pool)该子系统就是 Berkeley DB 所使用的通用

9、共享内存缓冲区,该子系统可以被应用程序单独使用。3、 事务子系统(Transaction)该子系统为 Berkekey DB 提供事务管理功能,保证操作的原则性、一致性和孤立性。事务子系统适用于对需要事务保证的数据进行修改的场合。4、 锁子系统(Locking)该子系统提供进程之间以及进程内部的并发管理机制,为系统提供多用户读取和单用户修改同一对象的共享控制。该子系统可以被应用程序单独使用。5、 日志子系统(Logging)该子系统采用的是先写日志的策略,支持事务子系统进行数据恢复,保证数据一 致性。4、SQLite 与 Berkeley DB 的异同通过上面的一些介绍,也许会对 SQLite

10、 和 Berkeley DB 有了一定的了解。从目前的趋势看,这两款嵌入式数据库有着旺盛的生命力,较好的应用领 域及发展空间。笔者翻阅了大量的资料,从各个角度,对它们的异同进行了多方面,多层次的比较,如表 1 所示。表 1 SQLite 与 Berkeley DB 的异同特性SQLiteBerkeley DB是否为关系数据库是否支持 SQL开发语言数据类型存储方式存储模式数据库引擎适用系统错误处理加密功能是否免费难易程度是是C 语言无转换成 ASCII 码Btree虚拟从 ARM/Linux 到 SPARC/Solaris 多种硬件平台较少弱全部较易否否C、Java 语言无原样存储Btree、

11、Hash、Queue 和 Recno无UNIX/POSIX systems、Win32 及嵌入式系统 WinCE、VxWorks 等较详细强部分较难通过此表我们可以较为直观地看到,SQLite 和 Berkeley DB 在数据库类型、开发语言、存储方式、模式等方面有着较大的差异。下面笔者就对其中某些重要方面进行相对详细的论述:1、 数据库类型SQLite 基于关系数据库模式,支持绝大多数标准的 SQL92 语句,在很大程度上实现了 ANSI SQL92 标准,特别是支持视图、触发器、事务,支持嵌套 SQL。它通过 SQL 编译器(SQL Complier)来实现 SQL 语言对数据库进行操作

12、,采用单文件存放数据库。在操作语句上更类似关系型数据库的产品使用,非常方便。这也就使得那些曾经有过 PC 机数据库 经验的人,对SQLite 的学习变得易如反掌。此外,SQLite 也有 API 的概念,而且极其易于使用,只需要三个用来执行 SQL 和获得数据的函数。它还是可以扩展的,允许程序员自定义函数,然后以 callback 的形式集合进去。语言 API 是脚本接口的基础,如已经发布的(Tcl 接口)。开放源码团体已经扩展了众多的客户接口、适配器、驱动等,这就使得其他语言对 SQLite 的使用也成为可能。Berkeley DB 不是关系型的数据库,不能应用标准的 SQL 语句对数据库操

13、作,对它的操作要调用专用的 API 实现。这些 API 提供了查询、插入、删除等功能。使用 Berkeley DB 提供的函数来进行数据库的访问和管理并不复杂。在大多数场合下,只需按照统一的接口标准进行调用就可以完成最基本的操作。2、 存储方式及模式SQLite 只提供了 Btree 存储数据的模式。对二进制数据,SQLite 不能直接保存;但可以先将二进制的数据转换成 ASCII 编码,然后再保存。Base64 编码机制是最常见的把二进制数据转换成 ASCII 编码的手段。在 SQLite 的 C 语言代码 encode.c 中,提供了 Base64 编码的功能。Berkeley DB 对任

14、何存入的数据都是按原样直接存储到数据文件中去,无论其是二进制数据还是 ASCII 或 Unicode 等编码的文本。Berkeley DB 提供了四种存储数据的模式:Btree、Hash、Queue 和 Recno。在打开数据库的时候,要指定一种存储模式。对于以上各种存储模式的具体定义、优缺点、及适用范围,由于篇幅有限,在此就不过多叙述,如有需要可参阅相关资料。3、 数据类型SQLite 最大的特点在于其数据类型为无数据类型(typelessness)。这意味着可以保存任何类型的数据到所想要保存的任何表的任何列中,无论这列声明的数据类型是什么。虽然在生成表结构的时候,要声明每个域的数据类型,但

15、 SQLite 并不做任何检查。开发人员要靠自己的程序来控制输入与读出数据的类型。这里有一个例外,就是当主键为整型值时,如果要插入一个非整型值时会产生异常。虽然,SQLite 允许忽略数据类型,但是,仍然建议在 Create Table 语句中指定数据类型,因为数据类型有利于增强程序的可读性。另外,虽然在插入或读出数据的时候是不区分类型的,但在比较的时候,不同数据类型是有区别的。在 Berkeley DB 中关 键字(key)和数据 (data)是用来进行数据库管理的基础,由这两者构成的 key/data 对,组成了数据库中的一个基本结构单元。通过使用这种方式,用 API 函数访问数据库时,只

16、需提供关键字就能够访问到相应的数据。关键字和数据在 Berkeley DB中都是用一个名为 DBT 的简单结构来表示的,它的作用主要是保存相应的内存地址及其长度。5 应用SQLite 嵌入式数据库提供了以源码发布的方式,要在众多的硬件平台进行移植,可以根据不同平台对源码进行交叉编译来实现。编译主要有以下 几个步骤:1、到 http:/www.sqlite.org/的 cvs 中下载最新的源代码包,解压后将生成 sqlite 目录,另外新建并转到一个与 sqlite 目录平行的同级目录,如 make 目录。2、用“echo$PATH”命令查看 PATH 中是否已经包含交叉编译工具 arm-lin

17、ux-gcc。3、为了在 ARM-Linux 下能正常运行 sqlite,需要对 sqlite/src/sqliteInt.h 作一定的修改,以确保 btree(树)有正确的变量大小,如“ptr”和“char”。不同体系结构的 Linux,如 X86 和 ARM,会有些差别。对于 ARM-Linux 可以找到如下部分:# ifndef INTPTR_TYPE# if SQLITE_PTR_SZ=4# define INTPTR_TYPE int# else# define INTPTR_TYPE long long# endif在上面的代码前加上一句# define SQLITE_PTR_SZ

18、 4这样后面的“typedef INTPTR_TYPE ptr;”就是定义的“int”类型,而不是“long long”。4、使用 configure 进行一些配置。修改 sqlite 目录下的 configure,让 configure 不去检查交叉编译环境。由于篇幅有限不再详述。5、修改 Makefile 文件。将代码行 BCC=arm-linux-gcc-g-O2 改成 BCC=gcc-g-O2。另外,一般是以静态链接的形式将 sqlite 放到 ARM-Linux 的硬件板上运行的,所以继续修改 Makefile,找到标记为 sqlite:的代码段,将其中的 libsqlite.la

19、改成.libs/libsqlite.a。做完上述修改,用 make 生成 sqlite、libsqlite.a、libsqlite.so。为了减小执行文件大小可以用 strip 处理,去掉其中的调试信息。6、在 ARM 板上运行 sqlite。将 sqlite 拷贝到 ARM 板上,方法很多,需要根据具体的情况来选择。如 ftp、cm-dftp、wget 等。将 sqlite 下载到 ARM 板的/tmp 目录,因为此目录是可写的。修改权限并运行:chmod+wx sqlite./sqlite test.sqlite会出现sqlite如果一切正常,现在 sqlite 已经在 ARM-Linux

20、 下跑了起来,然后就可以基于此进行下一步的应用开发了。6 结语嵌入式数据库 SQLite 和 Berkeley DB,在体积上、功能上、运行速度及难易程度都存在着或多或少的异同。但它们都有能够充分适应硬件的能力,能很好地适应嵌入式系统的需要。就笔者来看,SQLite 功能虽不及 Berkeley DB 强大,但它的设计思想是小型、快速和最小化的管理。这就使得 SQLite 在大小和功能之间找到了一个理想的平衡点,而且完全的开源代码使其可以称得上是理想的“嵌入式数据库”。当然在具体的嵌入式应用中可以根据具体情况选择 应用。参考文献:1、http:/www.sqlite.org , SQLite 的官方主页2、http:/ ,Berkeley DB 的官方主页3、Michael Owens. Embedding an SQL Database with Sqlite. Linux Journal,2003 06 014、薛启康.Linux 环境下的数据库.中国计算机报,2001 总期号:10095、张孝.嵌入式移动数据库的现状及发展J/OL. http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。