• 工作总结
  • 工作计划
  • 心得体会
  • 述职报告
  • 事迹材料
  • 申请书
  • 作文大全
  • 读后感
  • 调查报告
  • 励志歌曲
  • 请假条
  • 创先争优
  • 毕业实习
  • 财神节
  • 高中主题
  • 小学一年
  • 名人名言
  • 财务工作
  • 小说/有
  • 承揽合同
  • 寒假计划
  • 外贸信函
  • 励志电影
  • 个人写作
  • 其它相关
  • 生活常识
  • 安全稳定
  • 心情短语
  • 爱情短信
  • 工会工作
  • 小学五年
  • 金融类工
  • 搞笑短信
  • 医务工作
  • 党团工作
  • 党校学习
  • 学习体会
  • 下半年工
  • 买卖合同
  • qq空间
  • 食品广告
  • 办公室工
  • 保险合同
  • 儿童英语
  • 软件下载
  • 广告合同
  • 服装广告
  • 学生会工
  • 文明礼仪
  • 农村工作
  • 人大政协
  • 创意广告
  • 您现在的位置:六七范文网 > 其它相关 > 正文

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

    来源:六七范文网 时间:2023-05-20 15:20:20 点击:

    摘要:分析和比较了典型的嵌入式数据库SQLite和Berkeley DB,讨论了SQLite和Berkeley DB的异同点,最后列举了一个基于ARM-Linux的SQLite应用实例。

    关键词:嵌入式数据库; SQLite;Berkeley DB;虚拟数据库引擎(VDBE)

    中图法分类:TP311文献标识码:A 文章编号:1009-3044(2008)16-21192-02

    Embedded Database Typical Technology:SQLite and Berkeley

    REN Dong-mei

    (Dept. of Computer,Anhui University of Science and Technology,Huainan 232001,China)

    Abstract:By analyzing and comparing with SQLite and Berkeley DB, the article discussesthe similarity and difference between them. At last, it enumerates one SQLite application based on the ARM-Linux.

    Key words: Embedded Database; SQLite; Berkeley DB; VDBE

    1 引言

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

    2 嵌入式数据库

    通常,我们采用数据库来实现对数据的存储、检索等功能。像MySQL这类基于C/S结构的关系型数据库系统,虽然代表着目前数据库应用的主流,却并不能满足所有应用场合的需要。很多的应用,仅仅利用到了这些数据库产品的基本特性而已。有时我们需要的可能只是一个简单的基于磁盘文件的数据库系统,这样就不必安装庞大的数据库服务器,以简化数据库应用程序的设计。在某些特殊应用场合,比如在嵌入式系统中,由于系统的硬件软件资源都有限,这些数据库产品就明显有一些臃肿,甚至是不可实现的。在这些情况下,嵌入式数据库的优势就特别明显了。

    嵌入式数据库通常是与嵌入式操作系统及具体的应用集成在一起,无需独立运行数据库引擎,由程序直接调用相应的API就可实现对数据的存取操作。更直白地讲,嵌入式数据库是一种具备了基本数据库特性的数据文件嵌入式数据库。与其它数据库产品的区别是:前者是程序驱动式,而后者是引擎响应式。嵌入式数据库的一个很重要的特点是它们的体积非常小,编译后的产品也不过几十KB,在一些移动设备上极具竞争力。

    3 SQLite

    SQLite是D.理查德.希普用一个小型的C库开发的一种强有力的嵌入式关系数据库管理体制。它简单易学、速度较快,同时提供了丰富的数据库接口,提供了对SQL92的大多数支持:支持多表和索引、事务、视图、触发和一系列的用户接口及驱动。

    SQLite的体系结构大体上可以分成八个主要的子系统。顶层是标记处理器(tokenize)和分析器(parser)。SQLite有自己高度优化的代码生成器,可以快速、高效地生产出代码。底部是经过优化的B树,这样有助于运行在可调整的页面缓冲上时,对磁盘的查找降低到最小。再往下是页面高速缓存,它作用在OS的抽象层之上,这样的体系结构使数据库的可移植性变为可能。

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

    SQLite有以下特性:支持ACID事务;零配置―无需安装和管理配置;存储在单一磁盘文件中的一个完整的数据库;数据库文件可以在不同字节顺序的机器间自由共享;支持数据库大小至2TB;足够小,全部源码大致3万行C代码,250KB;比目前流行的大多数据库运行速度快;提供了对事务功能和并发处理的支持,应用Transaction既保证了数据的完整性,也会提高运行速度,因为多条语句一起提交给数据库的速度会比逐一提交的方式更快;独立、没有额外依赖。

    4 Berkeley DB

    Berkeley DB是由sleepycat software开发的轻量级嵌入式数据库,它不仅适用于嵌入式系统,而且可以直接连接到应用程序内部,和应用程序运行在同一地址空间。传统的数据库一般作为独立服务器工作,而Berkeley DB是软件开发库,开发者将它嵌入到应用程序中,应用程序本身就是一个服务器,而只是利用嵌入式数据库开发来实现定制的数据库逻辑,避免了与应用服务器进程间通信的开销,因此Berkeley DB具有较高的运行效率,适用于资源受限的嵌入式系统。

    一般而言,Berkeley DB数据库系统可以大致分为五个子系统:

    (1)存取管理子系统(Access Methods)

    该子系统为创建和访问数据库文件提供基本的支持。在没有事务管理的情况下,该子系统中的模块可单独使用,为应用程序提供快速高效的数据存取服务。

    (2)内存池管理子系统(Memory Pool)

    该子系统就是Berkeley DB所使用的通用共享内存缓冲区,该子系统可以被应用程序单独使用。

    (3)事务子系统(Transaction)

    该子系统为Berkekey DB提供事务管理功能,保证操作的原则性、一致性和孤立性。事务子系统适用于对需要事务保证的数据进行修改的场合。

    (4)锁子系统(Locking)

    该子系统提供进程之间以及进程内部的并发管理机制,为系统提供多用户读取和单用户修改同一对象的共享控制。该子系统可以被应用程序单独使用。

    (5)日志子系统(Logging)

    该子系统采用的是先写日志的策略,支持事务子系统进行数据恢复,保证数据一致性。

    5 SQLite与Berkeley DB的异同

    通过上面的一些介绍,也许会对SQLite和Berkeley DB有了一定的了解。从目前的趋势看,这两款嵌入式数据库有着旺盛的生命力,较好的应用领域及发展空间。笔者翻阅了大量的资料,从各个角度,对它们的异同进行了多方面多层次的比较,如表1所示。

    表1 SQLite与Berkeley DB的异同

    通过此表我们可以较为直观地看到,SQLite和Berkeley DB在数据库类型、开发语言、存储方式、模式等方面有着较大的差异。下面就其中某些重要方面进行相对详细的论述:

    (1)数据库类型

    SQLite基于关系数据库模式,支持绝大多数标准的SQL92语句,在很大程度上实现了ANSI SQL92标准,特别是支持视图、触发器、事务,支持嵌套SQL。它通过SQL编译器(SQL Complier)来实现SQL语言对数据库进行操作,采用单文件存放数据库。在操作语句上更类似关系型数据库的产品使用,非常方便。这也就使得那些曾经有过PC机数据库经验的人,对SQLite的学习变得易如反掌。

    此外,SQLite也有API的概念,而且极其易于使用,只需要三个用来执行SQL和获得数据的函数。它还是可以扩展的,允许程序员自定义函数,然后以callback的形式集合进去。C语言API是脚本接口的基础,如已经发布的(Tcl接口)。开放源码团体已经扩展了众多的客户接口、适配器、驱动等,这就使得其他语言对SQLite的使用也成为可能。

    Berkeley DB不是关系型的数据库,不能应用标准的SQL语句对数据库操作,对它的操作要调用专用的API实现。这些API提供了查询、插入、删除等功能。使用Berkeley DB提供的函数来进行数据库的访问和管理并不复杂。在大多数场合下,只需按照统一的接口标准进行调用就可以完成最基本的操作。

    (2)存储方式及模式

    SQLite只提供了Btree存储数据的模式。对二进制数据,SQLite不能直接保存,但可以先将二进制的数据转换成ASCII编码,然后再保存。Base64编码机制是最常见的把二进制数据转换成ASCII编码的手段。在SQLite的C语言代码encode.c中,提供了Base64编码的功能。

    Berkeley DB对任何存入的数据都是按原样直接存储到数据文件中去,无论其是二进制数据还是ASCII或Unicode等编码的文本。Berkeley DB提供了四种存储数据的模式:Btree、Hash、Queue和Recno。在打开数据库的时候,要指定一种存储模式。

    对于以上各种存储模式的具体定义、优缺点、及适用范围,由于篇幅有限,在此就不过多叙述,如有需要可参阅相关资料。

    ⑶数据类型

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

    虽然,SQLite允许忽略数据类型,但是,仍然建议在Create Table语句中指定数据类型,因为数据类型有利于增强程序的可读性。另外,虽然在插入或读出数据的时候是不区分类型的,但在比较的时候,不同数据类型是有区别的。

    在Berkeley DB中关键字(key)和数据(data)是用来进行数据库管理的基础,由这两者构成的key/data对,组成了数据库中的一个基本结构单元。通过使用这种方式,用API函数访问数据库时,只需提供关键字就能够访问到相应的数据。关键字和数据在Berkeley DB中都是用一个名为DBT的简单结构来表示的,它的作用主要是保存相应的内存地址及其长度。

    6 应用

    SQLite嵌入式数据库提供了以源码发布的方式,要在众多的硬件平台进行移植,可以根据不同平台对源码进行交叉编译来实现。编译主要有以下几个步骤:

    (1)到,Berkeley DB的官方主页.

    [3] Michael Owens. Embedding an SQL Database with Sqlite. Linux Journal,2003.06

    [4] 张孝.嵌入式移动数据库的现状及发展.

    注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

    推荐访问:嵌入式 典型 数据库 技术 Berkeley