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

近期要使用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),调用本身非常easy,应用程序和DB所提供的库在一起编译成为可执行程序。这样的方式从双方面极大提高了DB的效率。第一:DB库和应用程序执行在同一个地址空间,没有client程序和数据库server之间昂贵的网络通讯开销,也没有本地主机进程之间的通讯;第二:不须要对SQL代码解码,对数据的訪问直截了当。

DB对须要管理的数据看法非常easy,DB数据库包括若干条记录,每个记录由keyword和数据(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中的记录由keyword和数据构成,keyword和数据都用结构DBT表示。实际上全然能够把keyword看成特殊的数据。结构中最重要的两个字段是 void * data和u_int32_t size,分别相应数据本身和数据的长度。

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

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

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

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

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

HASH算法:DB中实际使用的是扩展线性HASH算法(extended linear hashing),能够依据HASH表的增长进行适当的调整。keyword能够为随意的数据结构。

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

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

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

时间: 2024-08-02 11:00:38

BDB (Berkeley DB)数据库简单介绍(转载)的相关文章

让你提前认识软件开发(25):数据库简单介绍

第2部分 数据库SQL语言 数据库简单介绍 数据库是个通用化的综合性的数据集合.它可以供各种用户共享且具有最小的冗余度和较高的数据与程序的独立性. 眼下,国际上主导的大型数据库管理系统有ORACLE.SQL SERVER.SYBASE.INFORMIX和INGRES等. 数据库中经常使用的编程语言是SQL语言,按其功能可分为四大部分: (1) 数据定义语言(Data Definition Language.DDL),用于定义.撤销和改动数据模式. (2) 数据查询语言(Data Query La

Zookeeper简单介绍(转载)

转载自:http://www.cnblogs.com/sunddenly/p/4033574.html 1.ZooKeeper概述 ZooKeeper是一种为分布式应用所设计的高可用.高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务.由于ZooKeeper的开源特性,后来我们的开发者在分布式锁的基础上,摸索了出了其他的使用方法:配置维护.组服务.分布式消息队列.分布式通知/协调等. 注意:ZooKeeper性能上的特点决定了它能够用在大型的.分布式的系统当中.从可靠性方面来说,它并

数据库索引介绍(转载)

实际上,您可以把索引理解为一种特殊的目录.微软的SQLSERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇集索引).下面,我们举例来说明一下聚集索引和非聚集索引的区别: 其实,我们的汉语字典的正文本身就是一个聚集索引.比如,我们要查"安"字,就会很自然地翻开字典的前几页,因为"安"的拼音是"an",而按照拼音排序汉字的字典是以英文字母

一个简单的NoSQL内存数据库—Berkeley DB基本操作的例子

一个简单的NoSQL内存数据库—Berkeley DB基本操作的例子 最近,由于云计算的发展,数据库技术也从结构式数据库发展到NoSQL数据库,存储模式从结构化的关系存储到现在如火如荼的key/value存储.其中Berkeley DB就是上述过程中的一个比较有代表性的内存数据库产品,数据库的操作是通过程序来实现的,而不是SQL语句.特别是当今数据不断动态增加的过程中,试图 通过数据切割来达到扩充的思路已经行不通了,因为事先不知道客户数据格式,因此服务提供商不可能进行数据切割.而无模式的key/

免费数据库(SQLite、Berkeley DB、PostgreSQL、MySQL、Firebird、mSQL、MSDE、DB2 Express-C、Oracle XE)

SQLite数据库是中小站点CMS的最佳选择 SQLite 是一个类似Access的轻量级数据库系统,但是更小.更快.容量更大,并发更高.为什么说 SQLite 最适合做 CMS (内容管理系统)呢?并不是说其他数据库不好, Oracle.MySQL.SQLServer 也都是非常优秀的 DBS,只不过他们设计目标不同,特性不同,所以只有更适用某个应用场景,没有绝对的好坏之分. 我归纳的中小型站点的CMS的特点如下: 1.数据量不超过10万 2.日页面访问量不超过10万 3. 一部分网站全部生成

Berkeley DB

Berkeley DB基础教程 http://blog.csdn.net/jediael_lu/article/details/27534223 Berkeley DB教程之三:读写数据的几种方法的比较 http://www.micmiu.com/nosql/berkeley/berkeley-write-read-data/ 三.一个简单的BDB JE例子 http://blog.csdn.net/ms_x0828/article/details/5506324 Berkeley DB基础教程

Berkeley DB基础教程

一.Berkeley DB的介绍 (1)Berkeley DB是一个嵌入式数据库,它适合于管理海量的.简单的数据.如Google使用其来保存账户信息,Heritrix用其来保存froniter. (2)key/value是Berkeley DB用来管理数据的基础,每个key/value对代表一条记录. (3)Berkeley DB在底层实现采用B树,可以看成能够存储大量数据的HashMap. (4)它是Oracle公司的一个产品,C++版本最新出现,之后JAVA等版本也陆续出现.它不支持SQL语

Asp.net博客系统收集和简单介绍

国内Asp.net博客系统收集和简单介绍 [转载文章,仅供个人参考,引自http://www.soyaoo.com/Blog/post/92.html] 1.ZJ-Blog程序简介:基于ASP.net 1.1环境开发的单用户博客程序,支持Access和MySQL两种数据库,其最大的特点是采用.net开发并大量的使用了Ajax技术,本人还没用使用过此程序但是直觉上觉得大量应用Ajax也未必是一件好事,个人觉得给用户适当的体验或许更能引起用户的兴趣.当然用户其实最关心的并非是这些技术问题,而是程序的

MySql数据库基本介绍和基本语法

一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系统中,关系型数据库使用最为广泛.面向对象数据库则是由面向对象语言催生的新型数据库,目前的一些数据库系统,如:SQL Server 2005.Oracle10g等都开始增加面向对象的特性. 二.常用基本SQL语句/语法 Ø SQL语句基础理论 SQL是操作和检索关系型数据库的标准语言,标准SQL语句可用于操作然后关系型数据库.