首页 > 代码库 > BDB

BDB

BDB (Berkeley DB)数据库简介(转载)

DB最初开发的目的是以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现(如AT&T的dbm,Berkeley的ndbm,GNU项目的gdbm),DB的第一个发行版在1991年出现,当时还包含了B+树数据访问算法。在1992年,BSD UNIX第4.4发行版中包含了DB1.85版。基本上认为这是DB的第一个正式版。在1996年中期,Sleepycat软件公司成立,提供对DB的商业支持。在这以后,DB得到了广泛的应用,当前最新版本是4.3.27。
DB支持几乎所有的现代操作系统,如LINUX、UNIX、WINDOWS等,也提供了丰富的应用程序接口,支持C、C++、JAVA、PERL、TCL、PYTHON、PHP等。DB的应用十分广泛,在很多知名的软件中都能看到其身影。例如参考资料2中作者谈到利用DB在LINUX下实现内核级文件系统;参考资料3中通过实际测试数据说明DB提高了OPENLDAP的效率。LINUX下的软件包管理器RPM也使用DB管理软件包相关数据,可以使用命令file查看RPM数据目录/var/lib/rpm下的文件,则有形式如下的输出:
Dirnames: Berkeley DB (Btree, version 9, native byte-order)
Filemd5s: Berkeley DB (Hash, version 8, native byte-order)
值得注意的是DB是嵌入式数据库系统,而不是常见的关系/对象型数据库,对SQL语言不支持,也不提供数据库常见的高级功能,如存储过程,触发器等。

DB的设计思想是简单、小巧、可靠、高性能。如果说一些主流数据库系统是大而全的话,那么DB就可称为小而精。DB提供了一系列应用程序接口(API), 调用本身很简单,应用程序和DB所提供的库在一起编译成为可执行程序。这种方式从两方面极大提高了DB的效率。第一:DB库和应用程序运行在同一个地址空 间,没有客户端程序和数据库服务器之间昂贵的网络通讯开销,也没有本地主机进程之间的通讯;第二:不需要对SQL代码解码,对数据的访问直截了当。

rpm,subversion都使用bdb数据库,包名叫db4
[root@localhost db]# rpm -qa|grep db
db4-4.7.25-18.el6_4.x86_64
gdbm-1.8.0-36.el6.x86_64
dbus-glib-0.86-6.el6.x86_64
dbus-libs-1.2.24-7.el6_3.x86_64
db4-utils-4.7.25-18.el6_4.x86_64

[root@localhost rpm]# pwd
/var/lib/rpm
[root@localhost rpm]# ll
total 28664
-rw-r--r--. 1 root root  1548288 Jul 17 15:00 Basenames
-rw-r--r--. 1 root root    12288 Jul 17 15:00 Conflictname
-rw-r--r--. 1 root root    24576 Jul 17 17:04 __db.001
-rw-r--r--. 1 root root   229376 Jul 17 17:04 __db.002
-rw-r--r--. 1 root root  1318912 Jul 17 17:04 __db.003
-rw-r--r--. 1 root root   753664 Jul 17 17:04 __db.004
-rw-r--r--. 1 root root   782336 Jul 17 15:00 Dirnames
-rw-r--r--. 1 root root  2547712 Jul 17 15:00 Filedigests
-rw-r--r--. 1 root root    12288 Jul 17 15:00 Group
-rw-r--r--. 1 root root    12288 Jul 17 15:00 Installtid
-rw-r--r--. 1 root root    12288 Jul 17 15:00 Name
-rw-r--r--. 1 root root    12288 Jul 17 15:00 Obsoletename
-rw-r--r--. 1 root root 21786624 Jul 17 15:00 Packages
-rw-r--r--. 1 root root  1282048 Jul 17 15:00 Providename
-rw-r--r--. 1 root root   557056 Jul 17 15:00 Provideversion
-rw-r--r--. 1 root root    12288 Jun 24 10:56 Pubkeys
-rw-r--r--. 1 root root   110592 Jul 17 15:00 Requirename
-rw-r--r--. 1 root root    69632 Jul 17 15:00 Requireversion
-rw-r--r--. 1 root root    24576 Jul 17 15:00 Sha1header
-rw-r--r--. 1 root root    12288 Jul 17 15:00 Sigmd5
-rw-r--r--. 1 root root    12288 Jun 24 10:57 Triggername

[root@localhost lib]# cd /root/svnrepo/db/
[root@localhost db]# ll
total 2216
-rw-r--r--. 1 root root    8192 Jul 17 16:09 changes
-rw-r--r--. 1 root root    8192 Jul 17 16:06 checksum-reps
-rw-r--r--. 1 root root    8192 Jul 17 15:26 copies
-rw-r--r--. 1 root root   24576 Jul 17 16:15 __db.001
-rw-r--r--. 1 root root  368640 Jul 17 16:15 __db.002
-rw-r--r--. 1 root root 1318912 Jul 17 16:15 __db.003
-rw-r--r--. 1 root root  393216 Jul 17 16:15 __db.004
-rw-r--r--. 1 root root 1499136 Jul 17 16:15 __db.005
-rw-r--r--. 1 root root   57344 Jul 17 16:15 __db.006
-rw-r--r--. 1 root root    2422 Jul 17 15:26 DB_CONFIG
-rw-r-----. 1 root root      50 Jul 17 16:15 __db.register
-r--r--r--. 1 root root       2 Jul 17 15:26 format
-rw-r--r--. 1 root root       4 Jul 17 15:26 fs-type
-rw-r--r--. 1 root root    8192 Jul 17 15:26 locks
-rw-r--r--. 1 root root    8192 Jul 17 15:26 lock-tokens
-rw-r--r--. 1 root root 1048576 Jul 17 16:15 log.0000000001
-rw-r--r--. 1 root root    8192 Jul 17 15:26 miscellaneous
-rw-r--r--. 1 root root    8192 Jul 17 16:09 node-origins
-rw-r--r--. 1 root root    8192 Jul 17 16:09 nodes
-rw-r--r--. 1 root root    8192 Jul 17 16:09 representations
-rw-r--r--. 1 root root    8192 Jul 17 16:09 revisions
-rw-r--r--. 1 root root    8192 Jul 17 16:09 strings
-rw-r--r--. 1 root root    8192 Jul 17 16:09 transactions
-rw-r--r--. 1 root root    8192 Jul 17 15:26 uuids