最近要使用DBD,于是搜了下相关的资料,先贴个科普性的吧:

转自http://www.javaeye.com/topic/202990

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就可称为小而精。DB提供了一系列应用程序接口(API),调用本身很简单,应用程序和DB所提供的库在一起编译成为可执行程序。这种方式从两方面极大提高了DB的效率。第一:DB库和应用程序运行在同一个地址空间,没有客户端程序和数据库服务器之间昂贵的网络通讯开销,也没有本地主机进程之间的通讯;第二:不需要对SQL代码解码,对数据的访问直截了当。

DB对需要管理的数据看法很简单,DB数据库包含若干条记录,每一个记录由关键字和数据(KEY/VALUE)构成。数据可以是简单的数据类型,也可以是复杂的数据类型,例如C语言中结构。DB对数据类型不做任何解释, 完全由程序员自行处理,典型的C语言指针的"自由"风格。如果把记录看成一个有n个字段的表,那么第1个字段为表的主键,第2--n个字段对应了其它数据。DB应用程序通常使用多个DB数据库,从某种意义上看,也就是关系数据库中的多个表。DB库非常紧凑,不超过500K,但可以管理大至256T的数据量。

DB的设计充分体现了UNIX的基于工具的哲学,即若干简单工具的组合可以实现强大的功能。DB的每一个基础功能模块都被设计为独立的,也即意味着其使用领域并不局限于DB本身。例如加锁子系统可以用于非DB应用程序的通用操作,内存共享缓冲池子系统可以用于在内存中基于页面的文件缓冲。

DB核心数据结构
数据库句柄结构DB:包含了若干描述数据库属性的参数,如数据库访问方法类型、逻辑页面大小、数据库名称等;同时,DB结构中包含了大量的数据库处理函数指针,大多数形式为 (*dosomething)(DB *, arg1, arg2, …)。其中最重要的有open,close,put,get等函数。

数据库记录结构DBT:DB中的记录由关键字和数据构成,关键字和数据都用结构DBT表示。实际上完全可以把关键字看成特殊的数据。结构中最重要的两个字段是 void * data和u_int32_t size,分别对应数据本身和数据的长度。

数据库游标结构DBC:游标(cursor)是数据库应用中常见概念,其本质上就是一个关于特定记录的遍历器。注意到DB支持多重记录(duplicate records),即多条记录有相同关键字,在对多重记录的处理中,使用游标是最容易的方式。

数据库环境句柄结构DB_ENV:环境在DB中属于高级特性,本质上看,环境是多个数据库的包装器。当一个或多个数据库在环境中打开后,环境可以为这些数据库提供多种子系统服务,例如多线/进程处理支持、事务处理支持、高性能支持、日志恢复支持等。

DB中核心数据结构在使用前都要初始化,随后可以调用结构中的函数(指针)完成各种操作,最后必须关闭数据结构。从设计思想的层面上看,这种设计方法是利用面向过程语言实现面对对象编程的一个典范。

DB数据访问算法
在数据库领域中,数据访问算法对应了数据在硬盘上的存储格式和操作方法。在编写应用程序时,选择合适的算法可能会在运算速度上提高1个甚至多个数量级。大多数数据库都选用B+树算法,DB也不例外,同时还支持HASH算法、Recno算法和Queue算法。接下来,我们将讨论这些算法的特点以及如何根据需要存储数据的特点进行选择。

B+树算法:B+树是一个平衡树,关键字有序存储,并且其结构能随数据的插入和删除进行动态调整。为了代码的简单,DB没有实现对关键字的前缀码压缩。B+树支持对数据查询、插入、删除的常数级速度。关键字可以为任意的数据结构。

HASH算法:DB中实际使用的是扩展线性HASH算法(extended linear hashing),可以根据HASH表的增长进行适当的调整。关键字可以为任意的数据结构。

Recno算法: 要求每一个记录都有一个逻辑纪录号,逻辑纪录号由算法本身生成。实际上,这和关系型数据库中逻辑主键通常定义为int AUTO型是同一个概念。Recho建立在B+树算法之上,提供了一个存储有序数据的接口。记录的长度可以为定长或不定长。

Queue算法:和Recno方式接近, 只不过记录的长度为定长。数据以定长记录方式存储在队列中,插入操作把记录插入到队列的尾部,相比之下插入速度是最快的。

对算法的选择首先要看关键字的类型,如果为复杂类型,则只能选择B+树或HASH算法,如果关键字为逻辑记录号,则应该选择Recno或Queue算法。当工作集关键字有序时,B+树算法比较合适;如果工作集比较大且基本上关键字为随机分布时,选择HASH算法。Queue算法只能存储定长的记录,在高的并发处理情况下,Queue算法效率较高;如果是其它情况,则选择Recno算法,Recno算法把数据存储为平面文件格式。

BDB (Berkeley DB)数据库简介(转载)相关推荐

  1. BDB (Berkeley DB)数据库简单介绍(转载)

    近期要使用DBD,于是搜了下相关的资料,先贴个科普性的吧: 转自http://www.javaeye.com/topic/202990 DB综述 DB最初开发的目的是以新的HASH訪问算法来取代旧的h ...

  2. Berkeley db 数据库

    开发Berkeley DB原因: DB最初开发的目的是以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现(如AT&T的dbm,Berkeley的ndbm,GNU项目的gdbm ...

  3. Sybase数据库简介 (转载)

    一.Sybase数据库简介 (转载) 1.版本 1984年,Mark B. Hiffman和Robert Epstern创建了Sybase公司,并在1987年推出了Sybase数据库产品.SYBASE ...

  4. BDB (Berkeley DB)简要数据库(转载)

    使用最近DBD.然后搜了下相关资料,首先公布的是一门科学: 转会http://www.javaeye.com/topic/202990 DB综述 DB最初开发的目的是以新的HASH訪问算法来取代旧的h ...

  5. Berkeley DB 数据库记录Dbt

    1.   数据库记录 DBT对象提供一个void *数据类型的成员函数指向您的数据,并使用另一成员函数标识数据的长度.因此,它们可以被用来存储任何东西,从简单的原始数据,复杂的类对象,只要你想要的信息 ...

  6. sliva数据库简介--转载

    sliva rRNA数据库(http://www.arb-silva.de/)用来检查和比对RNA序列,既可以针对16S/18S,SSU,也可以针对23S/28S, LSU,包括了Bacteria, ...

  7. 简单粗暴,微生物生态研究中常用数据库简介--转载

    微生物生态(MicrobialEcology),又名环境微生物(Environmental Microbiology),是研究微生物之间及其与环境之间相互关系的学科.从生物角度,其研究对象主要有真核微 ...

  8. Berkeley DB(BDB)介绍

    Berkeley DB是一个开放源代码的内嵌式数据库管理系统,能够为应用程序提供高性能的数据管理服务.应用它程序员只需要调用一些简单的API就可以完成对数据的访问和管理.与常用的数据库管理系统(如My ...

  9. 开源数据库:Berkeley DB和SQLite

    下面介绍的是两个开放源代码的 嵌入式 数据库,Berkeley DB和SQLite.同时侧重介绍如何应用Java连接这两种嵌入式数据库. 一. Berkeley DB      1. 简介 Berke ...

最新文章

  1. uwsgi模式_nginx+uwsgi 和nginx+gunicorn区别、如何部署
  2. [云炬创业基础笔记]第二章创业者测试20
  3. 程序的加载和执行(五)——《x86汇编语言:从实模式到保护模式》读书笔记25
  4. Go Concurrency Patterns: Pipelines and cancellation
  5. 程序员探案之 Python 和 Redis 的“第三者”
  6. JVM学习手册(X):查看堆内存使用情况以及排错
  7. 通过python切换hosts文件
  8. Python之字符串格式化
  9. English_写作常用句型5句
  10. GDI+中的图片处理类Image或Bitmap
  11. (java+selenium)Web自动化12306模拟人工滑块验证
  12. java还原混淆代码_飘云阁安全论坛如何还原混淆加密的JAVA代码 - Powered by Discuz!...
  13. 微信公众号前端40163解决办法
  14. Web安全深度剖析第三章读书笔记
  15. 美国的有线电视节目提供商
  16. [转载] 服务器基础知识
  17. c++之 std::tie
  18. 如何用r语言分析数据
  19. 如何成为一名优秀的企业管理者
  20. [C++复健日常] for_each

热门文章

  1. 利用GIMP实现图片压缩
  2. Linux 二进制文件调试命令
  3. 非奇异矩阵的多种判断方式
  4. 最新H5网页分享到Twitter、Facebook带缩略图
  5. TM1650数码管驱动芯片
  6. 程序员如何轻松又愉快的学好英语
  7. 软件工程——软件测试方法
  8. web前端常见面试题总结
  9. (转)BT下载不死!Magnet(磁力链接)开创网络BT2.0时代!!
  10. 第32篇 网络(二)HTTP