2022年2022年开源嵌入式数据库BERKELEYDB .pdf





《2022年2022年开源嵌入式数据库BERKELEYDB .pdf》由会员分享,可在线阅读,更多相关《2022年2022年开源嵌入式数据库BERKELEYDB .pdf(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、开源嵌入式数据库BerkeleyDB(1)MySQL 这类基于 C/S 结构的关系型数据库系统虽然代表着目前数据库应用的主流,但却并不能满足所有应用场合的需要。有时我们需要的可能只是一个简单的基于磁盘文件的数据库系统。这样不仅可以避免安装庞大的数据库服务器,而且还可以简化数据库应用程序的设计。Berkeley DB正是基于这样的思想提出来的。BerkeleyDB简介BerkeleyDB是一个开放源代码的内嵌式数据库管理系统,能够为应用程序提供高性能的数据管理服务。应用它程序员只需要调用一些简单的 API 就可以完成对数据的访问和管理。与常用的数据库管理系统(如 MySQL和 Oracle 等)
2、有所不同,在BerkeleyDB中并没有数据库服务器的概念。应用程序不需要事先同数据库服务建立起网络连接,而是通过内嵌在程序中的BerkeleyDB函 数 库 来完 成对 数 据 的保 存、查 询、修 改和 删 除 等操 作。Berkeley DB为许多编程语言提供了实用的API 接口,包括 C、C、Java、Perl、Tcl、Python 和 PHP 等。所有同数据库相关的操作都由Berkeley DB函数库负责统一完成。这样无论是系统中的多个进程,或者是相同进程中的多个线程,都可以在同一时间调用访问数据库的函数。而底层的数据加锁、事务日志和存储管理等都在 Berkeley DB函数库中实现
3、。它们对应用程序来讲是完全透明的。俗话说:“麻雀虽小五脏俱全。”Berkeley DB函数库本身虽然只有300KB左右,但却能够用来管理多达 256TB的数据,并且在许多方面的性能还能够同商业级的数据库系统相抗衡。就拿对数据的并发操作来说,BerkeleyDB能够很轻松地应付几千个用户同时访问同一个数据库的情况。此外,如果想在资源受限的嵌入式系统上进行数据库管理,Berkeley DB可能就是惟一正确的选择了。BerkeleyDB作为一种嵌入式数据库系统在许多方面有着独特的优势。首先,由于其应用程序和数据库管理系统运行在相同的进程空间当中,进行数据操作时可以避免繁琐的进程间通信,因此耗费在通信
4、上的开销自然也就降低到了极低程度。其次,Berkeley DB使用简单的函数调用接口来完成所有的数据库操作,而不是在数据库系统中经常用到的SQL语言。这样就避免了对结构化查询语言进行解析和处理所需的开销。基本概念BerkeleyDB简化了数据库的操作模式,同时引入了一些新的基本概念,从而使得访问和管理数据库变得相对简单起来。在使用 Berkeley DB提供的函数库编写数据库应用程序之前,有必要先了解以下名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 10 页 -这些基本概念。关键字和数据关键字(Key)和数据(Data)是Berkeley DB用来进行数据库管理的基础,由这两者
5、构成的 Key/Data 对(见表 1)组成了数据库中的一个基本结构单元,而整个数据库实际上就是由许多这样的结构单元所构成的。通过使用这种方式,开发人员在使用Berkeley DB提供的 API来访问数据库时,只需提供关键字就能够访问到相应的数据。表 1Key/Data 对如果想将第一行中的“sport”和“football”保存到BerkeleyDB数据库中,可以调用BerkeleyDB函数库提供的数据保存接口。此时“sport”和“football”将分别当成关键字和数据来看待。之后如果需要从数据库中检索出该数据,可以用“sport”作为关键字进行查询。此时BerkeleyDB提供的接口函
6、数会返回与之对应的数据“football”。关键字和数据在 Berkeley DB中都是用一个名为DBT的简单结构来表示的。实际上两者都可以是任意长度的二进制数据,而DBT的作用主要是保存相应的内存地址及其长度,其结构如下所示:在使用 BerkeleyDB进行数据管理时,缺省情况下是一个关键字对应于一个数据,但事实上也可以将数据库配置成一个关键字对应于多个数据。对象句柄在 Berkeley DB函数库定义的大多数函数都遵循同样的调用原则:首先创建某个结构,然后再调用该结构中的某些方法。从程序设计的角度来讲,这一点同面向对象的设计原则是非常类似的,即先创建某个对象的一个实例,然后再调用该实例的某
7、些方法。正因如此,BerkeleyDB引入了对象句柄的概念来表示实例化后的结构,并且将结构中的成员函数称为该句柄的方法。对象句柄的引入使得程序员能够完全凭借面向对象的思想,来完成对BerkeleyDB数据库的访问和操作,即使当前使用的是像C这样的结构化语言。例如,对于打开数据库的操作来说,可以调用DB的对象句柄所提供的 open 函数,其原型如下所示:错误处理对于任何一个函数库来说,如何对错误进行统一的处理都是需要考虑的问题。Berkeley DB提供的所有函数都遵循同样的错误处理原则,即函数成功执行后返回零,否则的话则返回非零值。对于系统错误(如磁盘空间不足和访问权限不够等),返回的是一个标
8、准的值;而对于非系统错误,返回的则是一个特定的错误编码。例如,如果在数据库中没有与某个特定关键字所对应的数据,那么在通过该关键字检索数据时就会出现错误。此时函数的返回值将是DB_NOTFOUND,表示所请求名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 10 页 -的关键字并没有在数据库中出现。所有标准的errno 值都是大于零的,而由BerkeleyDB定义的特殊错误编码则都是小于零的。要求程序员记住所有的错误代号既不现实也没有什么实际意义,因为 Berkeley DB提供了相应的函数来获得错误代号所对应的错误描述。一旦有错误发生,只需首先调用db_strerror()函数来获
9、得错误描述信息,然后再调用DB-err()或 DB-errx()就可以很轻松地输出格式化后的错误信息。开源嵌入式数据库BerkeleyDB(2)应用统一的编程接口使用 Berkeley DB 提供的函数来进行的访问和管理并不复杂,在大多数场合下只需按照统一的接口标准进行调用就可以完成最基本的操作。打开打开通常要分两步进行:首先调用db_create()函数来创建 DB 结构的一个实例,然后再调用 DB-open()函数来完成真正的打开操作。Berkeley DB 将所有对的操作都封装在名为DB 的结构中。db_create()函数的作用就是创建一个该结构,其原型如下所示:typedefstru
10、ct_dbDB;int db_create(DB*dbp,DB_ENV*dbenv,u_int32_t flags);将磁盘上保存的文件作为打开是由DB-open()函数来完成的,其原型如下所示:int DB-open(DB*db,DB_TXN*txnid,constchar*file,constchar*database,DBTYPE type,u_int32_t flags,int mode);下面这段代码示范了如何创建DB 对象句柄及如何打开文件:#include#include#include#include 名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 10 页 -#
11、include#defineDATABASE demo.db/*以下代码的头同此/int main()DB*dbp;int ret;if(ret=db_create(&dbp,NULL,0)!=0)fprintf(stderr,db_create:%sn,db_strerror(ret);exit(1);if(ret=dbp-open(dbp,NULL,DATABASE,NULL,DB_BTREE,DB_CREATE,0664)!=0)dbp-err(dbp,ret,%s,DATABASE);exit(1);代码首先调用 db_create()函数来创建一个DB 对象句柄。变量 dbp 在调用
12、成功后将成为句柄,通过它可以完成对底层的配置或访问。接下去调用 DB-open()函数打开文件,参数“DATABASE”指明对应的磁盘文件名为demo.db;参数“DB_BTREE”表示底层使用的数据结构是B 树;而参数“DB_CREATE”和“0664”则表明当文件不存在时创建一个新的文件,并且将该文件的属性值设置为 0664。错误处理是在打开时必须的例行检查,这可以通过调用DB-err()函数来完成。其中参数“ret”是在调用 Berkeley DB 函数后返回的错误代码,其余参数则用于显示结构化的错误信息。添加数据向 Berkeley DB 中添加数据可以通过调用DB-put()函数来完
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年开源嵌入式数据库BERKELEYDB 2022 年开源 嵌入式 数据库 BERKELEYDB

限制150内