berkeleydb 生成的数据库文件查看工具怎么查看

3033人阅读
数据库(2)
开发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年中期,软件公司成立,提供对DB的商业支持。在这以后,DB得到了广泛的应用,当前最新版本是4.7.25。
Berkeley 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应用程序的通用操作,内存共享缓冲池子系统可以用于在内存中基于页面的文件缓冲。
Berkeley DB数据访问算法
& & & & & 数据访问算法对应了数据在硬盘上的存储格式和操作方法。在编写应用程序时,选择合适的算法可能会在运算速度上提高1个甚至多个数量级。大多数数据库都选用B+树算法,DB也不例外,同时还支持HASH算法、Recno算法和Queue算法。接下来,我们将讨论这些算法的特点以及如何根据需要存储数据的特点进行选择。
& & &B+树算法
& & & & & B+树是一个平衡树,关键字有序存储,并且其结构能随数据的插入和删除进行动态调整。为了代码的简单,DB没有实现对关键字的前缀码压缩。B+树支持对数据查询、插入、删除的常数级速度。关键字可以为任意的数据结构。
& & &HASH算法
& & & & & DB中实际使用的是扩展线性HASH算法(extended linear hashing),可以根据HASH表的增长进行适当的调整。关键字可以为任意的数据结构。要求每一个记录都有一个逻辑纪录号,逻辑纪录号由算法本身生成。实际上,这和关系数据库中逻辑主键通常定义为int AUTO型是同一个概念。
& & &Recno算法:&
& & & & & 要求每一个记录都有一个逻辑纪录号,逻辑纪录号由算法本身生成。实际上,这和关系型数据库中逻辑主键通常定义为int AUTO型是同一个概念。Recho建立在B+树算法之上,提供了一个存储有序数据的接口。记录的长度可以为定长或不定长。
& & Queue算法:
& & & & 和Recno方式接近, 只不过记录的长度为定长。数据以定长记录方式存储在队列中,插入操作把记录插入到队列的尾部,相比之下插入速度是最快的。
四种访问算法的比较
对算法的选择首先要看关键字的类型,如果为复杂类型,则只能选择B+树或HASH算法,如果关键字为逻辑记录号,则应该选择Recno或Queue算法。当工作集关键字有序时,B+树算法比较合适;如果工作集比较大且基本上关键字为随机分布时,选择HASH算法。Queue算法只能存储定长的记录,在高的并发处理情况下,Queue算法效率较高;如果是其它情况,则选择Recno算法,Recno算法把数据存储为平面文件格式。
深入对B+树与hash比较
& & & & & 1:在小的数据设置上,&&和&在性能表现上没什么差别。在那儿,所有的,或大部分数据设置被放在了里面。
& & & & & 2:尽管如此,当一个一数据设置足够大的时候,会有一些重要的数据页再也装不进里了。这种情况下,我们上面讨论的在性能表现上就很重要了。例如,因为在中没有排列顺序中附近的机制。所以,在中通常比中更有效。&方法将产生更少的&调用。
& & & & & 3:尽管如此,当一个数据设置更大的时候,&访问方法能赢过方法。原因是比数据库包含了更多的元数据页。数据设置可以变的非常大,以至于元数据开始支配整个。如果这种事情发生,&将不得不对每次请求都进行一次&操作。&中几乎没有地方再放置那些真正的数据页了,失去了的意义。而因为有很少的元数据,可以它的照样可以用来放置那些数据页,起到&的作用。
& & & & &4:当一个数据更更大的时候,以至于每个随机请求,&和几乎都要进行一次&操作的时候。在这种情况下,实际上只要遍历少树几个内部页()就差不多能找到,所以这也是在性能上的一个优势。应用程序对数据的访问式样也极大的影响这些行为。例如,延着光标往下遍历的话,每次&操作到&中的数据,将满足接下来的很多数据请求。
& & & & 5:如果数据设置只是比大一点,我们还是条件使用,如果你实在有太大的数据设置,&也许会更好一些。&公用程序是一个有用的工具,用来监视,你的表现的怎么样。
& & & & 以上具体数据量大小,我没有找到相关数据
& & & & & &其实到这你应该能看出来,&是在数据不是很大的时候是很优秀的,在更大的时候,由于元数据占用太多的原因,导致性能下降,落后与&&了,而不是说能超过它。所以能在元数据占用&不是太多以前,也就是你的足够大,使用只最好的选择。当然,如果每次访问的数据都是随机的没有什么次序,也不是的,那用也没什么优势了。
Berkeley 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中核心数据结构在使用前都要初始化,随后可以调用结构中的函数(指针)完成各种操作,最后必须关闭数据结构。从设计思想的层面上看,这种设计方法是利用面向过程语言实现面对对象编程的一个典范。
Berkeley DB系统结构
&&&& &Berkeley DB由五个主要的子系统构成.包括:&存取管理子系统、内存池管理子系统、事务子系统、锁子系统以和日志子系统。其中存取管理子系统作为Berkeley DB数据库进程包内部核心组件,而其他子系统都存在于Berkeley
DB数据库进程包的外部。 &
& & & 每个子系统支持不同的应用级别。
& & &1.数据存取子系统
&&& 数据存取(Access Methods)子系统为创建和访问数据库文件提供了多种支持。Berkeley DB提供了以下四种文件存储方法:
哈希文件、B树、定长记录(队列)和变长记录(基于记录号的简单存储方式),应用程序可以从中选择最适合的文件组织结构。程序员创建表时可以使用任意一种结构,并且可以在同一个应用程序中对不同存储类型的文件进行混合操作。&
&& 在没有事务管理的情况下,该子系统中的模块可单独使用,为应用程序提供快速高效的数据存取服务。
数据存取子系统适用于不需事务只需快速格式文件访问的应用。
&&& 2.内存池管理子系统
&&& 内存池(Memory pool)子系统对Berkeley DB所使用的共享缓冲区进行有效的管理。它允许同时访问数据库的多个进程或者进程的多个线程共享一个高速缓存,负责将修改后的页写回文件和为新调入的页分配内存空间。
&&& 它也可以独立于Berkeley DB系统之外,单独被应用程序使用,为其自己的文件和页分配内存空间。
内存池管理子系统适用于需要灵活的、面向页的、缓冲的共享文件访问的应用。
&&& 3.事务子系统
&&& 事务(Transaction)子系统为Berkeley DB提供事务管理功能。它允许把一组对数据库的修改看作一个原子单位,这组操作要么全做,要么全不做。在默认的情况下,系统将提供严格的ACID(原子性,一致性,隔离性,持久性)事务属性,但是应用程序可以选择不使用系统所作的隔离保证。该子系统使用两段锁技术和先写日志策略来保证数据库数据的正确性和一致性。它也可以被应用程序单独使用来对其自身的数据更新进行事务保护。事务子系统适用于需要事务保证数据的修改的应用。
&&& 4.锁子系统
&&& 锁(Locking)子系统为Berkeley DB提供锁机制,为系统提供多用户读取和单用户修改同一对象的共享控制。数据存取子系统可利用该子系统获得对页或记录的读写权限;事务子系统利用锁机制来实现多个事务的并发控制;该子系统也可被应用程序单独采用。锁子系统适用于一个灵活的、快速的、可设置的锁管理器。
&&& 5.日志子系统&&&
&&& 日志(Logging)子系统采用的是先写日志的策略,用于支持事务子系统进行数据恢复,保证数据一致性。它不大可能被应用程序单独使用,只能作为事务子系统的调用模块。
&BerkeleyDB存储功能概述
& & & Berkeley DB所管理数据的逻辑组织单位是若干个独立或有一定关系的数据库(database),每个数据库由若干记录组成,这些记录全都被表示成(key,value)的形式.
& & & 在物理组织上,每一个数据库在创建的时候可以由应用程序根据其数据特点来选择一种合适的存储结构。可供选择的四种文件存储结构分别是:哈希文件、B树、定长记录(队列)和变长记录(基于记录号的简单存储方式)。
& & & 一个物理的文件中可以只存放一个单独的数据库,也可以存放若干相关或不相关的数据库,而且这些数据库可以分别采用除队列之外任意不同的组织方式,以队列组织的数据库只能单独存放于一个文件,不能同其他存储类型混合存放。
& & & 一个文件除了受最大文件长度和存储空间的约束之外(为什么受最大文件长度约束?),理论上可以存储任意多个数据库。因此系统定位一个数据库通常需要两个参数——“文件名”和“数据库名”,这也是&不同于一般关系数据库的地方。
& & &&& Berkeley DB存储系统为应用程序提供了一系列的接口函数,用于对数据库的管理和操作。其中包括:
&&&&& (1)数据库的创建、打开、关闭、删除、重命名等,以及对数据的检索和增删改操作;
&&&& & (2)提供一些附加的功能,例如读取数据库状态信息、读取所在文件的信息、读取所在数据库环境的信息、清空数据库的内容、数据库的同步备份、版本升级、提示出错信息等等;
&&&& & (3)系统还提供了游标机制,用于存取和访问成组的数据,以及对两个或多个相关数据库进行关联和等值连接操作;
&&&&& (4)系统还给出了一些接口函数用于对存取策略进行优化配置,比如应用程序可以自己设置B树的排序比较函数、每页中存放key的最少数目,哈希桶的填充因子、哈希函数、哈希表最大长度,队列的最大长度,数据库存放的字节顺序,底层存储页的大小,内存分配函数,高速缓存的大小,定长记录的大小和填充位,变长记录所用的分隔符等等。
总结一些Berkeley DB特点:
1、开源的文件数据库,介于关系数据库与内存数据库之间,使用方式与内存数据库类似,它提供的是一系列直接访问数据库的函数
2、Berkeley DB可以保存任意类型的键/值对,而且可以为一个键保存多个数据,但是只支持键值对这一种数据结构
3、DB是系统,而不是常见的关系/对象型数据库,对SQL语言不支持,也不提供数据库常见的高级功能,如,等。
4、相比SQL Server等数据库,Berkeley DB架构简单,却支持很多高级的数据库特性,比如ACID 数据库事务处理,细粒度锁,XA接口,热备份以及同步复制。
5、访问速度快,省硬盘空间
6、Berkeley DB XML,是一个接口,通过它可以实现对XML数据存贮的支持。对XML数据的访问,会使用相应的查询语句如Xquery, Xpath。
Berkeley DB是一种在特定的数据管理应用程序中广泛使用的数据库系统,在世界范围内有超过两亿的用户支持.许多世界知名的厂商,像Amazon, AOL, British Telecom, Cisco Systems, EMC, Ericsson, Google, Hitachi, HP, Motorola, RSA Security, Sun Microsystems, TIBCO 以及 Veritas都依赖于BDB为他们的许多关键性应用提供快速的,弹性的,可靠的,并且高性价比的数据管理.
下面先简要说说BDB与其它几种数据库的区别:
(1)它们几乎都无一例外的采用了结构化查询语言(SQL),而BDB没有。
(2)它们几乎都无一例外的采用了客户/服务器模型,而BDB采用的是嵌入式模型。
Berkeley DB在嵌入式应用中比关系数据库和面向对象数据库要好,有以下两点原因:
&&&& (1)因为数据库程序库同应用程序在相同的地址空间中运行,所以数据库操作不需要进程间的通讯。在一台机器的不同进程间或在网络中不同机器间进行进程通讯所花费的开销,要远远大于函数调用的开销;
& & &(2)因为Berkeley DB对所有操作都使用一组API接口,因此不需要对某种查询语言进行解析,也不用生成执行计划,大大提高了运行效.
Berkeley DB缺点:
& & &个人观点:只能进行简单的键值对查询,对于SQL中较复杂的查询,由于缺乏像RDBMS连接,映射等操作,效率可能会差
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:153068次
积分:2191
积分:2191
排名:第12784名
原创:55篇
转载:34篇
评论:43条
(1)(2)(11)(24)(8)(5)(12)(1)(2)(2)(5)(12)(5)BerkeleyDB数据库在餐饮服务系统中的应用_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
BerkeleyDB数据库在餐饮服务系统中的应用
上传于||文档简介
&&B​e​r​k​e​l​e​y​D​B​数​据​库​在​餐​饮​服​务​系​统​中​的​应​用
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢Linux应用开发(30)
整理转载自:
Berkeley DB是历史悠久的嵌入式数据库系统,主要应用在UNIX/LINUX操作系统上,其设计思想是简单、小巧、可靠、高性能。
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算法把数据存储为平面文件格式。
DB软件的安装和编译
从DB的官方站点下载最新的软件包db-4.3.27.tar.gz,解压到工作目录,进入该目录,依次执行下列三条命令即可。
../dist/configure
make install
执行make uninstall,则可卸载已安装的DB软件。
DB缺省把库和头文件安装在目录/usr/local/BerkeleyDB.4.3/下,使用gcc test.c -ggdb -I/usr/local/BerkeleyDB.4.3/include/ -L/usr/local/BerkeleyDB.4.3/lib/ -ldb -lpthread就可正确编译程序。如果读者的测试主机操作系统为RED HAT9,则安装的DB版本可能是4.0。特别要注意到这两个版本的库是不兼容的。例如打开数据库函数DB-&open(),在4.0版本中入参为6个,而在4.3版中则为7个(可自行比较两个库的头文件db.h中DB-&open函数的定义)。因为在DB相关的应用程序中,open函数基本上都是要执行的,所以如果函数和版本不匹配,编译肯定会出错。当然,编译完成后,可以使用命令ldd查看库的依赖关系。
DB的常用操作
创建/打开数据文件
首先调用db_create()函数来创建DB结构的一个实例,然后再调用DB-&open()函数来完成真正的打开操作。Berkeley DB 将所有对数据库的操作都封装在名为DB 的结构中。db_create()函数的作用就是创建一个该结构。将磁盘上保存的文件作为数据库打开是由DB-&open()函数来完成的,其原型如下所示:
int DB-&open(DB *db, DB_TXN *txnid, const char *file,
const char *database, DBTYPE type, u_int32_t flags, int mode);
if ((ret = db_create(&dbp, NULL, 0)) != 0) {
fprintf(stderr, "db_create: %s\n",
db_strerror(ret));
if ((ret = dbp-&open(dbp, NULL, DATABASE, NULL,
DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp-&err(dbp, ret, "%s", DATABASE);
参数“DATABASE”指明对应的磁盘文件名为demo.db;参数“DB_BTREE”表示数据库底层使用的数据结构是B 树;而参数“DB_CREATE”和“0664”则表明当数据库文件不存在时创建一个新的数据库文件,并且将该文件的属性值设置为0664。
错误处理是在打开数据库时必须的例行检查,这可以通过调用DB-&err()函数来完成。其中 参数“ret”是在调用Berkeley DB 函数后返回的错误代码,其余参数则用于显示结构化的错误信息。
插入数据包
向Berkeley DB 数据库中添加数据可以通过调用DB-&put()函数来完成,其原型如下所示:
int DB-&put(DB *db, DB_TXN *txnid, DBT *key, DBT *data,u_int32_t flags);
在向数据库中添加数据时,如果给定的关键字已经存在,大多数应用会对于已经存在的数据采用覆盖原则。也就是说,如果数据库中已经保存了一个“sport/basketball”对,再次调用DB-&put()函数添加一个“sport/football”对,那么先前保存的那些数据将会被覆盖。但Berkeley DB 允许在调用DB-&put()函数时指定参数“DB_NOOVERWRITE”,声明不对数据库中已经存在的数据进行覆盖,一旦给出“DB_NOOVERWRITE”标记,如果DB-&put()函数在执行过程中发现给出的关键字在数据库中已经存在了,就无法成功地把该Key/Data 对添加到数据库中,于是将返回错误代码 “DB_KEYEXIST”。
检索数据包
从Berkeley DB 数据库中检索数据可以通过调用DB-&get()函数来完成,其原型如下所示:
int DB-&get(DB *db, DB_TXN *txnid, DBT *key, DBT *data,u_int32_t flags);
在进行数据检索时,对DB-&get()函数的返回值进行处理是必不可少的,因为它携带着检索操作是否成功完成等信息。下面列出的是DB-&get()函数的返回值:
函数调用成功,指定的关键字被找到;
DB_NOTFOUND
函数调用成功,但指定的关键字未被找到;
函数调用失败,可能出现了系统错误。
删除数据包
从Berkeley DB 数据库中删除数据可以通过调用DB-&del()函数来完成,其原型如下所示:
int DB-&del(DB *db, DB_TXN *txnid, DBT *key, u_int32_t flags);
删除数据只需给出相应的关键字,不用指明与之对应的数据。
key.data = "sport";
key.size = sizeof("sport");
if ((ret = dbp-&del(dbp, NULL, &key, 0)) == 0)
printf("db: %s: key was deleted.\n", (char*)key.data);
dbp-&err(dbp, ret, "DB-&del");
关闭数据文件
对于一次完整的数据库操作过程来说,关闭数据库是不可或缺的一个环节。这是因为Berkeley DB 需要依赖于系统底层的缓冲机制,也就是说只有在数据库正常关闭的时候,修改后的数据才有可能全部写到磁盘上,同时它所占用的资源也才能真正被全部释放。关闭数据库的操作是通过调用DB-&close()函数来完成的,其原型如下所示:
int DB-&close(DB *db, u_int32_t flags);
刷新缓存到硬盘
Berkeley DB的所有操作都是在内存中进行,在关闭数据库句柄时,会将所有数据写入到硬盘中;在程序运行中,如需要同步数据到硬盘,可调用sync()函数。
注:这个函数在4.3之前的版本是无参的,而在之后的版本增加参数,修改之前的例子需注意兼容;
dbp-&sync(dbp,0);
删除数据库
DB-&remove()函数用于删除指定的数据文件,如果在参数中没有指定数据包名称,则整个数据文件将被删除
dbp-&remove(
//数据包标识符指针
"mydb.db",
//数据文件名称
//数据包名称,这里没有指定,则删除整个文件
//操作标志
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:20157次
积分:1549
积分:1549
排名:第19230名
原创:122篇
转载:51篇
(4)(1)(5)(4)(16)(142)(1)Berkeley&DB&数据库介绍,SQLite数据库介绍
Berkeley DB 已经被ORACLE公司收购
嵌入式内存数据库系统Berkeley DB
1. Berkeley
DB支持几乎所有的现代操作系统,如LINUX、UNIX、WINDOWS等,也提供了丰富的应用程序接口,支持C、C++、JAVA、PERL、TCL、PYTHON、PHP等。
2. Berkeley DB for .net 0.95
版本是为.net2.0平台推出的,老外封装的,强。。。但是没有java版做的好。
3. Berkeley
DB的设计思想是简单、小巧、可靠、高性能。如果说一些主流数据库系统是大而全的话,那么DB就可称为小而精。DB提供了一系列应用程序接口(API),调用本身很简单,应用程序和DB所提供的库在一起编译成为可执行程序。这种方式从两方面极大提高了DB的效率。
第一:DB库和应用程序运行在同一个地址空间,没有客户端程序和数据库服务器之间昂贵的网络通讯开销,也没有本地主机进程之间的通讯;
第二:不需要对SQL代码解码,对数据的访问直截了当。
实际项目中非常适合快速本地文件存取。
4. 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算法把数据存储为平面文件格式。
(摘自 施聪 《嵌入式数据库系统Berkeley DB》)
5. .net平台序列化问题
&.NET 内置的二进制序列化引擎
--System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
相对于BdbFormatter,& .NET 内置的二进制序列化引擎有如下弱点:
1) 空间利用不充分,没必要为每条记录都存储元数据 meta-data
2) 速度慢,运行时才发现序列化类型
3) 不能部分反序列化
4) 没必要支持昂贵时间段数字类型排序
BDB 需要将对象转换成 byte[] 才能存储,定义的字段序列化转换类型XField,通过其构造方法注册到 BdbFormatter
/// 定义的字段序列化转换类型PeopleField,通过其构造方法注册到 BdbFormatter 引擎
/// Author:EKING
private void useBDBFormatter(DbFile dbf)
&&&&&&&&&&&
People p = new People();
&&&&&&&&&&&
p.Name = "Tom";
&&&&&&&&&&&
p.Age = 23;
&&&&&&&&&&&
BdbFormatter formatter = new BdbFormatter(3, 2048);
&&&&&&&&&&&
new PeopleField(formatter, true);
&&&&&&&&&&&
&&&&&&&&&&&
DbEntry key = formatter.ToDbEntry(p.Name);
&&&&&&&&&&&
DbEntry data = formatter.ToDbEntry(p);
&&&&&&&&&&&
dbf.Put(null, ref key, ref data);
&&&&&&&&&&&
dbf.Sync();
&&&&&&&&&&&
&&&&&&&&&&&
data = DbEntry.Out(new byte[2048]);
&&&&&&&&&&&
dbf.Get(null, ref key, ref data, DbFile.ReadFlags.None);
&&&&&&&&&&&
People p2 = new People();
&&&&&&&&&&&
formatter.FromDbEntry(ref p2, ref data);
&&&&&&&&&&&
MessageBox.Show( string.Format("{0},{1}", p2.Name, p2.Age));
&&&&&&&&&&&&
Berkeley DB
是由美国Sleepycat
Software公司开发的一套开放源代码的嵌入式数据库管理系统(已被Oracle收购),它为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。
DB为许多编程语言提供了实用的api接口,包括c、c++、java、perl、tcl、python和php等。所有同数据库相关的操作都由Berkeley
DB函数库负责统一完成。
官方地址为:
本文就先讲一下如何在CentOS下安装Berkeley DB数据库(其他系统类似)。
1、安装Berkeley DB
# cd /usr/local/src
# tar -zxvf db-4.6.18.tar.gz
# cd db-4.6.18
# cd build_unix
DB默认是安装在/usr/local/BerkeleyDB.4.6目录下,其中4.6就是版本号,你也可以指定&prefix参数来设置安装目录。
# ../dist/configure --prefix=/usr/local/berkeleydb
--enable-cxx
其中&enable-cxx就是编译C++库,这样才能编译Berkeley DB数据库的PHP扩展php_db4。
# make install
# echo '/usr/local/berkeleydb/lib/' && /etc/ld.so.conf
# ldconfig
这2句的作用就是通知系统Berkeley DB的动态链接库在/usr/local/berkeleydb/lib/目录。
至此,Berkeley DB数据库已经安装完成。
2、安装Berkeley DB的PHP扩展
虽然PHP里已经自带了php_db和php_dba两个扩展都支持Berkekey
DB,但是毕竟支持的有限,所以还是编译Berkeley DB自带的php_db4扩展好。
# cd /usr/local/src/db-4.6.18/php_db4/
# ./configure --with-db4=/usr/local/berkeleydb/
# make install
至此db4已编译好在/usr/lib64/php/modules/db4.so目录(具体跟你的系统有关)
修改php.ini 文件
extension=db4.so
重起WEB服务器(Apache等)
至此php_db4扩展的安装也完成了,执行php -m即可看到db4扩展已经加载了。
从字面上也不难理解,Db4Env设置数据库环境、Db4操作数据库、Db4Txn用于事务处理、Db4Cursor用于光标处理。具体使用可参考
php的函数参考:安装包的源码
c的参考函数:
/usr/local/src/db-4.6.18/php_db4/samples目录下提供了2个简单的例子simple_counter.php和transactional_counter.php。
simple_counter.php
已投稿到:

我要回帖

更多关于 数据库文件查看器 的文章

 

随机推荐