




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式数据库典型技术SQLite和Berkeley DB的研究摘要:与常见的数据库相比,嵌入式数据库具有体积孝功能齐备、可移植性、强健性等特点,本文分析和比拟了典型的嵌入式数据库SQLite和BerkeleyDB。首先从体系构造、子系统间调用关系、任务执行过程等角度对SQLite和BerkeleyDB进展了详细分析,然后重点从数据类型、存储方式、形式、数据库引擎和错误处理及加密功能等方面讨论了SQLite和BerkeleyDB的异同点,最后列举了一个基于ARLinux的SQLite应用实例。关键词:SQLite、BerkeleyDB、SQL、虚拟数据库引擎VDBE引言随着计算机技术与其它学科间
2、的不断交融、浸透,数据库应用的范围更加深化和详细。那些仅适用于P机,体积庞大、延时较长的数据库技术已不能满足针对性较强的嵌入式系统开发的需求。SLite和BerkeleyDB是目前应用较广泛、技术较稳定的两种嵌入式数据库。然而,国内对嵌入式数据库的研究起步较晚,还没能引起更多人的关注。更多人熟悉那些基于/S或B/S构造的关系型数据库来实现数据的存储、检索等功能。然而,在嵌入式系统中,由于软硬件资源有限,不可能安装庞大的数据库效劳器,而用户的需求可能由一个简单的基于磁盘文件的数据库系统就能实现,这仅仅是利用了那些数据库的根本特性。此时,对嵌入式数据库的研究就显得尤为重要了。1嵌入式数据库嵌入式数
3、据库通常是与嵌入式操作系统及详细的应用集成在一起,无需独立运行数据库引擎,由程序直接调用相应的API就可实现对数据的存取操作。嵌入式系统的开发环境决定了其数据库的特点:1、体积适当由于嵌入式系统自身的特点,对数据的存储和程序的运行都有较强的空间限制,所以嵌入式数据库首先应该保障的就是适当的体积。进一步来说就是占用尽量少的R、RA及PU的资源。2、功能齐备嵌入式系统开发中,用户需求决定了需要一个大小适中、功能齐备的数据库来实现数据管理,这就使得开发人员要采用一个可以提供完备开发文档且易于开发的数据库技术。此外,国家863工程2002AA714023,研究生精品课程资助05531451在嵌入式设备
4、中,数据库的管理对用户来说是透明的,这就要求此数据库可以自动完成启动初始化、日志管理、数据压缩、备份、数据恢复等功能;而且嵌入式设备经常有不可意料的硬复位,这就需要此数据库有高度的强健性。3、可移植性嵌入式系统的平台种类繁多,因此嵌入式数据库应有一定的可移植性,以适用于不同的软硬件平台。4、代码开源开源的代码在产品的开发过程中不仅可以减少开发本钱,更重要的是为后期的维护完善和稳定运行都提供了最为彻底的解决方法。2SQLiteSQLite的体系构造大体上可以分成八个主要的子系统,如图1所示。对数据库进展的各种操作都是按照此顺序,逐一执行的。顶层是标记处理器tkenize和分析器parser。SQ
5、Lite有自己高度优化的代码生成器,可以快速、高效地消费出代码。底部是经过优化的B树,这样有助于运行在可调整的页面缓冲上时,对磁盘的查找降低到最校再往下是页面高速缓存,它作用在S的抽象层之上,这样的体系构造使数据库的可移植性变为可能。该体系构造的核心是虚拟数据库引擎VDBE。VDBE完成与数据操作相关的全部任务,并且是客户和存储之间信息交换的中间单元。从各个角度分析,它都是SQLite的核心。当SQL语句被分析后,VDBE便开场工作。代码生成器将分析树翻译成一个袖珍程序,随后这些袖珍程序又被组合成VDBE的虚拟机器语言表示的一系列指令。如此反复,VDBE执行每条指令,最终完成SQL语句指定的查
6、询要求。SQLite有以下特性:支持AID事务、零配置无需安装和管理配置、存储在单一磁盘文件中的一个完好的数据库、数据库文件可以在不同字节顺序的机器间自由共享、支持数据库大小至2TB、足够孝全部源码大致3万行代码,250KB、比目前流行的大多数据库运行速度快,提供了对事务功能和并发处理的支持、应用Transatin既保证了数据的完好性,也会进步运行速度,因为多条语句一起提交给数据库的速度会比逐一提交的方式更快、独立、没有额外依赖。3BerkeleyDBBerkeleyDB是由sleepyatsftare开发的轻量级嵌入式数据库,它不仅适用于嵌入式系统,而且可以直接连接到应用程序内部,和应用程序
7、运行在同一地址空间。传统的数据库一般作为独立效劳器工作,而BerkeleyDB是软件开发库,开发者将它嵌入到应用程序中,应用程序本身就是一个效劳器,而只是利用嵌入式数据库开发来实现定制的数据库逻辑,防止了与应用效劳器进程间通信的开销,因此BerkeleyDB具有较高的运行效率,适用于资源受限的嵌入式系统。一般而言,BerkeleyDB数据库系统可以大致分为五个子系统,如图2所示。1、存取管理子系统Aessethds该子系统为创立和访问数据库文件提供根本的支持。在没有事务管理的情况下,该子系统中的模块可单独使用,为应用程序提供快速高效的数据存取效劳。2、内存池管理子系统eryPl该子系统就是Be
8、rkeleyDB所使用的通用共享内存缓冲区,该子系统可以被应用程序单独使用。3、事务子系统Transatin该子系统为BerkekeyDB提供事务管理功能,保证操作的原那么性、一致性和孤立性。事务子系统适用于对需要事务保证的数据进展修改的场合。4、锁子系统Lking该子系统提供进程之间以及进程内部的并发管理机制,为系统提供多用户读取和单用户修改同一对象的共享控制。该子系统可以被应用程序单独使用。5、日志子系统Lgging该子系统采用的是先写日志的策略,支持事务子系统进展数据恢复,保证数据一致性。4、SQLite与BerkeleyDB的异同通过上面的一些介绍,也许会对SQLite和Berkele
9、yDB有了一定的理解。从目前的趋势看,这两款嵌入式数据库有着旺盛的生命力,较好的应用领域及开展空间。笔者翻阅了大量的资料,从各个角度,对它们的异同进展了多方面,多层次的比拟,如表1所示。表1SQLite与BerkeleyDB的异同特性BerkeleyDB是否为关系数据库是否支持SQL开发语言数据类型存储方式存储形式数据库引擎适用系统错误处理加密功能是否免费难易程度是是语言无转换成ASII码Btree虚拟从AR/Linux到SPAR/Slaris多种硬件平台较少弱全部较易否否、Java语言无原样存储Btree、Hash、Queue和Ren无UNIX/PSIXsystes、in32及嵌入式系统in
10、E、Vxrks等较详细强部分较难通过此表我们可以较为直观地看到,SQLite和BerkeleyDB在数据库类型、开发语言、存储方式、形式等方面有着较大的差异。下面笔者就对其中某些重要方面进展相对详细的阐述:1、数据库类型SQLite基于关系数据库形式,支持绝大多数标准的SQL92语句,在很大程度上实现了ANSISQL92标准,特别是支持视图、触发器、事务,支持嵌套SQL。它通过SQL编译器(SQLplier)来实现SQL语言对数据库进展操作,采用单文件存放数据库。在操作语句上更类似关系型数据库的产品使用,非常方便。这也就使得那些曾经有过P机数据库经历的人,对SQLite的学习变得易如反掌。此外
11、,SQLite也有API的概念,而且极其易于使用,只需要三个用来执行SQL和获得数据的函数。它还是可以扩展的,允许程序员自定义函数,然后以allbak的形式集合进去。语言API是脚本接口的根底,如已经发布的(Tl接口)。开放源码团体已经扩展了众多的客户接口、适配器、驱动等,这就使得其他语言对SQLite的使用也成为可能。BerkeleyDB不是关系型的数据库,不能应用标准的SQL语句对数据库操作,对它的操作要调用专用的API实现。这些API提供了查询、插入、删除等功能。使用BerkeleyDB提供的函数来进展数据库的访问和管理并不复杂。在大多数场合下,只需按照统一的接口标准进展调用就可以完成最
12、根本的操作。2、存储方式及形式SQLite只提供了Btree存储数据的形式。对二进制数据,SQLite不能直接保存;但可以先将二进制的数据转换成ASII编码,然后再保存。Base64编码机制是最常见的把二进制数据转换成ASII编码的手段。在SQLite的语言代码ende.中,提供了Base64编码的功能。BerkeleyDB对任何存入的数据都是按原样直接存储到数据文件中去,无论其是二进制数据还是ASII或Unide等编码的文本。BerkeleyDB提供了四种存储数据的形式:Btree、Hash、Queue和Ren。在翻开数据库的时候,要指定一种存储形式。对于以上各种存储形式的详细定义、优缺点、
13、及适用范围,由于篇幅有限,在此就不过多表达,如有需要可参阅相关资料。3、数据类型SQLite最大的特点在于其数据类型为无数据类型(typelessness)。这意味着可以保存任何类型的数据到所想要保存的任何表的任何列中,无论这列声明的数据类型是什么。虽然在生成表构造的时候,要声明每个域的数据类型,但SQLite并不做任何检查。开发人员要靠自己的程序来控制输入与读出数据的类型。这里有一个例外,就是当主键为整型值时,假如要插入一个非整型值时会产生异常。虽然,SQLite允许忽略数据类型,但是,仍然建议在reateTable语句中指定数据类型,因为数据类型有利于增强程序的可读性。另外,虽然在插入或读
14、出数据的时候是不区分类型的,但在比拟的时候,不同数据类型是有区别的。在BerkeleyDB中关键字(key)和数据(data)是用来进展数据库管理的根底,由这两者构成的key/data对,组成了数据库中的一个根本构造单元。通过使用这种方式,用API函数访问数据库时,只需提供关键字就可以访问到相应的数据。关键字和数据在BerkeleyDB中都是用一个名为DBT的简单构造来表示的,它的作用主要是保存相应的内存地址及其长度。5应用SQLite嵌入式数据库提供了以源码发布的方式,要在众多的硬件平台进展移植,可以根据不同平台对源码进展穿插编译来实现。编译主要有以下几个步骤:2、用“eh$PATH命令查看
15、PATH中是否已经包含穿插编译工具ar-linux-g。3、为了在AR-Linux下能正常运行sqlite,需要对sqlite/sr/sqlitEint.h作一定的修改,以确保btree(树)有正确的变量大小,如“ptr和“har。不同体系构造的Linux,如X86和AR,会有些差异。对于AR-Linux可以找到如下部分:#ifndefINTPTR_TYPE#ifSQLITE_PTR_SZ=4#defineINTPTR_TYPEint#else#defineINTPTR_TYPElnglng#endif在上面的代码前加上一句#defineSQLITE_PTR_SZ4这样后面的“typedefI
16、NTPTR_TYPEptr;就是定义的“int类型,而不是“lnglng。4、使用nfigure进展一些配置。修改sqlite目录下的nfigure,让nfigure不去检查穿插编译环境。由于篇幅有限不再详述。6、在AR板上运行sqlite。将sqlite拷贝到AR板上,方法很多,需要根据详细的情况来选择。如ftp、-dftp、get等。将sqlite下载到AR板的/tp目录,因为此目录是可写的。修改权限并运行:hd+xsqlite./sqlitetest.sqlite会出现sqlite假如一切正常,如今sqlite已经在AR-Linux下跑了起来,然后就可以基于此进展下一步的应用开发了。6结语嵌入式数据库SQLite和BerkeleyDB,在体积上、功能上、运行速度及难易程度都存在着或多或少的异同
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年鸡西市社会治安综合治理中心招聘公益性岗位笔试真题
- 医院医生退休返聘合同标准文本
- 出售砖厂合同范例
- 北京商标转让合同样本
- 劳务派遣司机合同样本
- 升职加薪合同样本
- 再生塑料销售合同范例
- 医疗器材购销合同样本
- 劳务公司外包劳务合同标准文本
- 加工质量合同样本
- 广西壮族自治区贵港市覃塘区2023-2024学年七年级下学期7月期末历史试题(无答案)
- 食堂生物防治制度
- 2024年时事政治必考试题库及参考答案一套
- 《陆上风电场工程施工安装技术规程》(NB/T 10087-2018 )
- 2024详解《中华人民共和国爱国主义教育法》主题课件
- JTS105-1-2011 港口建设项目环境影响评价规范
- 输电线路(电缆)工程施工作业票典型模板(2024版)
- 护理非计划拔管应急预案
- 保险的起源和发展讲述课件
- 机械臂路径规划与运动控制
- 传染病报告管理工作技术指南
评论
0/150
提交评论