Sleepycat软件公司出品的Berkeley DB是一种在特定的数据管理应用程序中广泛使用的数据库系统,在世界范围内有超过两亿的用户支持.许多世界知名的厂商,像Amazon, AOL, British Telecom, Cisco Systems, EMC, Ericsson, Google, Hitachi, HP, Motorola, RSA Security, Sun Microsystems, TIBCO 以及 Veritas都依赖于BDB为他们的许多关键性应用提供快速的,弹性的,可靠的,并且高性价比的数据管理.
2.以下是chinaunix.net上一位高手给出的解释,在这里引用一下。
mysql就是用BDB实现的(mysql的后台) 。mysql快,BDB比mysql还要快N倍。
BDB并发高于RDBMS。
容量支持可达256TB。
基于HASH支持select数据比RDBMS快。
3.BDB数据库与其它的几种数据库的比较。
BDB数据库不同与其他几种数据库�C关系型(Relational databases),面向对象型(Object-oriented databases),网络数据库(Network databases),它是一种嵌入式(embeded databases)数据库。
下面先简要说说BDB与其它几种数据库的区别:
(1)它们几乎都无一例外的采用了结构化查询语言(SQL),而BDB没有。
(2)它们几乎都无一例外的采用了客户/服务器模型,而BDB采用的是嵌入式模型。
4. 下面是在网上找的一些有关BDB的资料,解释了BDB之所以会和当前流行的大多数数据库不同的一些原因,所引资料未注明出处,后面的翻译是我自己加的:
(1) BDB是一个开放源代码的嵌入式数据库的函数库,它为应用程序提供弹性的,高性能的,transaction-protected的数据库管理服务,BDB为数据的访问和管理提供了简单的应用程序接口API。
(2) BDB之所以是嵌入式数据库是因为它是直接连到应用程序中的。它和应用程序在同一内存空间运行。其结果是,不管应用程序是运行在同一台机 器上还是运行在网络上,在进行数据库操作时,它都无需进行进程间通信。BDB为许多编程语言提供了函数接口,这些语言包括C, C++, Java, Perl, Tcl, Python, 和 PHP。所有的数据库操作都发生在函数库内部。多个进程,或者是一个进程中的多个线程,都可以同时使用BDB,因为它们实际是在调用BDB函数库。一些像 locking, transaction logging, shared buffer management, memory management等等之类的低级服务都可以由函数库透明地处理。
(3) BDB函数库是高度可移植的。它可以运行在几乎所有的UNIX和LINUX系统之上,也支持WINDOWS和多种嵌入式实时操作系统。它 既可以运行在32位系统上,也可以运行在64位系统上。它活跃在高端服务器,桌面系统,掌上电脑,set-top boxes,网络交换机以及其它的一些领域。一旦BDB被连接到应用当中以后,终端用户一般是不知道后端数据库的存在的。
(4) BDB在许多方面都是弹性的。函数库本身非常紧凑(在常见的机器体系上大约只占用不到300K的text空间,但是它可以操作多达 256TB的数据。它也支持高强度的并发操作,可以同时允许数以千计的用户在同一个数据库进行操作。在高端服务器领域,BDB是足够小的,它可以在高度受 限的嵌入式系统上运行,但却可以利用高达GB量级的内存空间和高达TB量级的磁盘空间。
(5) BDB在嵌入式应用方面的性能比关系型数据库和面向对象的数据库优越的原因是多方面的。首先,因为函数库和应用是运行在同一地址空间中 的,省掉了数据库操作时的进程间通信。而众所周知,不管是在单机上还是在分布式系统上,进程间通信所花的时间远多于函数调用所要的时间。其次,因为BDB 对所有的操作提供了简洁的函数调用接口,无需对查询语言进行解析,也不需要预执行。
(6) 与其他大多数数据库系统相比,BDB提供了相对简单的数据访问服务。BDB只支持对记录所做的几种逻辑操作。它们是:
在表中插入一条记录。
从表中删除一条记录。
通过查询键(key)从表中查找一条记录。
更新表中已有的一条记录。
BDB不是一个独立的数据库服务器。它是一个函数库,和调用它的应用程序是运行在同一地址空间中的。可以把BDB作为数据库管理系统来构 建服务器程序。比如,有许多商业的和开源的轻量级目录访问协议(LDAP)服务器都使用BDB存储记录。LDAP客户端通过网络连接到服务器。服务器调用 BDB的API来查找记录并返回给客户。而在它本身而言,BDB却不是数据库的服务器端。
所以,BDB是一种完全不同于其它数据库管理系统的数据库,而且它也不是一个数据库服务器端。
当面对的是对性能,规模和可靠性要求都比较高的嵌入式应用的时候,BDB是理想的数据库管理系统。但对于要求多种不同服务的应用而言,选择它是不适当的。
BDB的初衷是提供快速的,可靠的,transaction-protected的记录存储。函数库本身并没有提供对交互查询的支持,也没有提供 图形化的报表工具,或者一些其它的数据库管理系统提供的服务。我们一直在致力于保持函数库的短小和简练,这样做,可以使得bug出现的机会大大减小,而且 因为只有很少的代码需要执行,我们可以保证数据库一直快速的运行。如果你的应用正好需要的是这样的一套功能的话,那么BDB几乎一定是你的首选对象。
一下是第一个实例程序,包括数据库的创建,打开,插入与读出
/******************************************************************/
函数原型:main()
调用函数:db_create() db->open() db->put() db->get() db->close()
输入参数:无
输出参数:查询结果
作者:alex
时间:2010.4.29
/******************************************************************/
#include<sys/types.h>
#include<stdio.h>
#include<stdlib.h>
#include<db.h>
#define DATABASE "alex.db"
int main()
{
DB *dbp;
DBT key,data;
int ret,t_ret;
if((ret=db_create(&dbp,NULL,0))!=0)
{
fprintf(stderr,"db_creat %s",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);
}
memset(&key,0,sizeof(key));
memset(&data,0,sizeof(data));
key.data="sport";
key.size=sizeof("sport");
data.data="football";
data.size=sizeof("football");
if((ret=dbp->put(dbp,NULL,&key,&data,0))==0)
printf("db:%s:key stored.\n",(char *)key.data);
else
dbp->err(dbp,ret,"DB->put");
memset(&key,0,sizeof(key));
memset(&data,0,sizeof(data));
key.data="sport";
key.size=sizeof("sport");
if((ret=dbp->get(dbp,NULL,&key,&data,0))==0)
{
printf("db:%s:key retrived:data was %s.\n",(char *)key.data,(char *)data.data);
}
else
dbp->err(dbp,ret,"DB->get");
if((t_ret=dbp->close(dbp,0))!=0&&ret==0)
return t_ret;
exit(ret);
}
Makefile文件的编写:
#CC=/usr/local/arm/2.95.3/bin
#KERNELDIR=/opt/friendlyARM/root_tftp
MDBINCDIR=/opt/friendlyARM/root_nfs/BerkeleyDB
CFLAGS += -I$(MDBINCDIR)
test:test.c
gcc $(CFLAGS)/include test.c -o test -L$(MDBINCDIR)/lib -ldb-4.5
clean:
-rm -f *.o