使用最近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下实现内核级文件系统。

ca=dwcn-newsletter-linux#resources">參考资料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算法的数据被存储作为平面文件格式。

BDB (Berkeley DB)简要数据库(转载)的更多相关文章

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

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

  2. C# 使用Berkeley DB

    Berkeley DB是一个开源的文件数据库,介于关系数据库与内存数据库之间.简称BDB Berkeley DB是嵌入式键值数据库库,为应用程序提供可扩展的高性能数据管理服务. Berkeley DB ...

  3. 「JAVA」:Berkeley DB的JAVA连接

    Berkeley DB是一个嵌入式的数据库,它适合于管理海量的.简单的数据.关键字/数据(key/value)是Berkeley DB用来进行数据管理的基础.每个key/value构成了一条记录,而整 ...

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

    SQLite数据库是中小站点CMS的最佳选择 SQLite 是一个类似Access的轻量级数据库系统,但是更小.更快.容量更大,并发更高.为什么说 SQLite 最适合做 CMS (内容管理系统)呢? ...

  5. Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)

    Berkeley DB的数据存储结构 BDB支持四种数据存储结构及相应算法,官方称为访问方法(Access Method),分别是哈希表(Hash Table).B树(BTree).队列(Queue) ...

  6. 比Redis更快:Berkeley DB面面观

    比Redis更快:Berkeley DB面面观 Redis很火,最近大家用的多.从两年前开始,Memcached转向Redis逐渐成为潮流:而Berkeley DB可能很多朋友还很陌生,首先,我们简单 ...

  7. Berkeley DB分布式探索

    明天回家就没有网络,今晚就将整个编写过程记录下来.顺带整理思路以解决未能解决的问题. 标题有点托大,想将Berkeley DB做成分布式存储,感觉很高端的样子,实际上就是通过ssh将Berkeley ...

  8. Berkeley DB数据处理

    设计一个结构,利用Berkeley DB完成大数据的存储,备份,查询功能. 已有的储备: 1.Berkeley DB的基本操作. 2.数据转存后数据不丢失. 3.过百GB以上数据的存储. 数据流如下, ...

  9. Berkeley DB

    最近用BDB写点东西,写了挺多个测试工程.列下表,也理清楚最近的思路 1.测试BDB程序,包括打开增加记录,查询记录,获取所有记录.将数据转存mysql 程序的不足,增加记录仅仅只有key和value ...

随机推荐

  1. web.xml中listener作用及使用

    一.WebContextLoaderListener 监听类 它能捕捉到server的启动和停止,在启动和停止触发里面的方法做对应的操作! 它必须在web.xml 中配置才干使用,是配置监听类的 二. ...

  2. SQL--存储过程+触发器 对比!

    一.存储过程 一:存储过程:存储过程是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中. 可以用存储过程名字和参数来调用存储过程,这样可以避免代码重复出现,用起来也方便. 例:    下面 ...

  3. 原型链(__proto__)

    前面详细的解释了new的几个步骤,其中随意带过了一下原型链的概念,如果细读那篇文章,基本对原型也能有所理解. 原型有两个关键属性,一个是 __proto__ 一个是 prototype ,了解了这两个 ...

  4. TCP、UDP数据包大小的限制(UDP数据包一次发送多大为好)——数据帧的物理特性决定的,每层都有一个自己的数据头,层层递减

    1.概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层. 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Da ...

  5. MFC TCHAR 和CHAR相互转换

    没有定义UNICODE,所以它里面的字符串就是简单用" "就行了,创建工程的时候包含了UNICODE定义,就必须对TCHAR和char进行转换. 首先是把TCHAR转为char / ...

  6. wikioi 1014 装箱问题

    来源:http://wikioi.com/problem/1014/ 1014 装箱问题 29人推荐 收藏 发题解 提交代码 报错 题目描写叙述 输入描写叙述 输出描写叙述 例子输入 例子输出 提示 ...

  7. SVNKit getFileFromSVN

    /* * ==================================================================== * Copyright (c) 2004-2011 ...

  8. 摘要算法CRC8、CRC16、CRC32,MD2 、MD4、MD5,SHA1、SHA256、SHA384、SHA512,RIPEMD、PANAMA、TIGER、ADLER32

    1.CRC8.CRC16.CRC32 CRC(Cyclic Redundancy Check,循环冗余校验)算法出现时间较长,应用也十分广泛,尤其是通讯领域,现在应用最多的就是 CRC32 算法,它产 ...

  9. 关于使用commons-email包测试发送邮件遇到的问题

    项目中有个需求是这样的:客户办理某一项业务,当用户成功提交业务办理信息后,系统生成一个业务随机码给用户,以此作为以后的业务办理结果查询依据.鉴于随机码较长,方便用户记录,在生成随机码的同时,提供用户发 ...

  10. poj 1094

    Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26911   Accepted: 92 ...