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算法的数据被存储作为平面文件格式。

转载于:https://www.cnblogs.com/hrhguanli/p/4592891.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291006.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言之rand()和srand()函数

1、rand()、srand()函数介绍 srand 初始化随机种子,rand 产生随机数 定义函数:int rand(void) 函数功能:产生随机数 函数说明:rand的内部实现是用线性同余法做的,不是真的随机数,因为其周期特别长,一定的范围里可看成是随机的。rand()会返回一随机数值,范围在0至RAND_…

delphi中利用Indy的TIdFtp控件实现FTP协议

2019独角兽企业重金招聘Python工程师标准>>> delphi中利用Indy的TIdFtp控件实现FTP协议版权声明:本文为博主原创文章,未经博主允许不得转载。现在很多应用都需要上传与下载大型文件,通过HTTP方式上传大文件有一定的局限性。幸好FT…

一篇文章了解Liquid模版引擎

背景平常比如开发个代码生成器一般是定一个模板,然后里面很多变量,根据数据生成文件。这时候模版引擎就派上了用场。下面我们来介绍下Liquid。什么是Liquid 呢,就像java、c#等编程语言一样,Liquid也是一种独立的语言,没…

C++之map插入数据相同的key不能覆盖value解决办法

1、问题 C里面,如果map里面插入之前的<key, value>,如果key在map里面有的话&#xff0c;不会覆盖之前的value,一般先判断之前有没有数据&#xff0c;有的话先删除&#xff0c;然后再去添加。 2、代码实现 3、运行结果

【BZOJ】【4145】【AMPPZ2014】The Prices

状压DP/01背包 Orz Gromah 容易发现m的范围很小……只有16&#xff0c;那么就可以状压&#xff0c;用一个二进制数来表示买了的物品的集合。 一种简单直接的想法是&#xff1a;令$f[i][j]$表示前$i$个商店买了状态集合为$j$的商品的最小代价&#xff0c;那么我们转移的时候就需…

Java中的String,StringBuilder,StringBuffer三者的区别

最近在学习Java的时候&#xff0c;遇到了这样一个问题&#xff0c;就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢&#xff0c;自己从网上搜索了一些资料&#xff0c;有所了解了之后在这里整理一下&#xff0c;便于大家观看&#xff0c;也便于加深自己学习…

WPF 实现人脸检测

WPF开发者QQ群此群已满340500857 &#xff0c;请加新群458041663由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 PS&#xff1a;有更好的方式欢迎推荐。接着上一篇利用已经训练好的数据文件,检测人脸 地址如下&#xff1a;http…

C++之函数的默认值参数说明

1、思考 今天看到C代码的时候&#xff0c;发现文件里面的函数定义和实现都有3个参数&#xff0c;特码调用的时候只有2个参数了&#xff0c;日了狗&#xff0c;java里面好像没有这种方式&#xff0c;后来才发现是默认参数 2、代码实现 3、展示结果 4、总结 注意默认参数需要写…

如何用c语言验证一个定理,验证动量定理方法一

【目的和要求】验证物体做直线运动时&#xff0c;其动量的增量等于合外力的冲量&#xff0c;以加深学生对动量定理的理解。【仪器和器材】电磁打点计时器(J0203型)&#xff0c;学生电源(J1202型)&#xff0c;斜面(带定滑轮)&#xff0c;小车&#xff0c;纸带&#xff0c;天平(托…

Merge Two Sorted Lists leetcode java

题目&#xff1a; Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 题解&#xff1a;这道题是链表操作题&#xff0c;题解方法很直观。首先&#xff0c;进行边界条件判断&am…

插头DP

AC HDU1693 不能再简单了的插头DP 1 #include <cstdio>2 #include <fstream>3 #include <iostream>4 5 #include <cstdlib>6 #include <cstring>7 #include <algorithm>8 #include <cmath>9 10 #include <queue>11 #include…

自定义控件详解(四):Paint 画笔路径效果

Paint 画笔 &#xff0c;即用来绘制图形的"笔" 前面我们知道了Paint的一些基本用法&#xff1a; paint.setAntiAlias(true);//抗锯齿功能 paint.setColor(Color.RED); //设置画笔颜色 paint.setStyle(Style.FILL);//设置填充样式 paint.setStrokeWidth(10);//设…

C++之undefined reference to “ssl::first::first()“

1、错误 只写了一个简单的C继承类&#xff0c;就出现了这个错误 undefined reference to "ssl::first::first()" 2、原因 我在second类里面继承了first类&#xff0c;但是在first类里面&#xff0c;我把构造函数写成了 first();然后这个函数有没有实现&#xff0c;…

qt中c语言怎么显示图片和文字,Qt中在图片上叠加显示文字

如何在win7上安装ant-design1.首先要安装务必确认 Node.js 已经升级到 v4.x 或以上. 2.打开cmd,输入"npm install antd-init -g",安装antd(可以自己先指定安装目 ...&lbrack;TopCoder&rsqb; SRM&lowbar;594&lowbar;DIV2&period;250好长一段时间没…

2021 .NET Conf China 主题分享之-轻松玩转.NET大规模版本升级

去年.NET Conf China 技术大会上&#xff0c;我给大家分享了主题《轻松玩转.NET大规模版本升级》&#xff0c;今天把具体分享的内容整理成一篇博客&#xff0c;供大家研究参考学习。一、先说一下技术挑战和业务背景我们公司&#xff1a;特来电新能源股份有限公司&#xff1a;中…

HDU4462-稻草人

思想不难&#xff0c;代码不易&#xff0c;且敲且珍惜。 枚举的方式&#xff0c;假设有十个位置可以放稻草人&#xff0c;用二进制的形式转换一下&#xff0c;对每种情况判断是否全被覆盖&#xff0c;记录成功时稻草人的个数&#xff0c;每次比较选出最小的。 注意一个陷阱&…

OC-归档和解归档

1 //归档:将对象数据存储到文件的过程 NSArchiver2 //反归档:从文件中读取数据到对象中的过程3 4 int main(int argc, const char * argv[]) {5 autoreleasepool {6 7 #if 08 //使用系统的方法进行归档 NSArchiver9 NSDictionary *mutDic [NSMu…

推荐电影 奥黛丽赫本的十大经典电影 1953-1989

奥黛丽赫本的十部经典电影 1.《罗马假日》 &#xff08;Roman Holiday&#xff0c;1953&#xff09; 导演&#xff1a;威廉惠勒 风情指数★★★★★ 看点&#xff1a;奥黛丽赫本和格里高利派克的完美组合 如果没有奥黛丽赫本&#xff0c;或许《罗马假日》只会作为一部平庸…

C和C++之用extern “C“实现它们之间的互调

1、extern "C"的解释 一个C++程序包含其它语言编写的部分代码。C++编写的代码片段可能被使用在其它语言编写的代码中,不同语言编写的代码互相调用是困难的,甚至是同一种编写的代码但不同的编译器编译的代码。例如,不同语言和同种语言的不同实现可能会在注册变…

ASP.NET Core基于滑动窗口算法实现限流控制

前言在实际项目中&#xff0c;为了保障服务器的稳定运行&#xff0c;需要对接口的可访问频次进行限流控制&#xff0c;避免因客户端频繁请求导致服务器压力过大。而AspNetCoreRateLimit[1]是目前ASP.NET Core下最常用的限流解决方案。查看它的实现代码&#xff0c;我发现它使用…