转载地址:http://blog.sina.com.cn/s/blog_467eb8ca010008pk.html
前面几章讲了用访问方法快速的存储和取回数据。后面主要讲任何访问方法的应用,它们是线性的和可恢复的在面对系统故障时。
Berkeley DB 底层体系结构:
如上图,应用程序调用访问方法,而访问方法使用底层的共享内存cache放置最近用过的文件页面。
当应用程序需具备恢复能力的时候,它们调用的访问方法必须预先封装在事务字系统中。程序告诉bdb事务的开始和结束点。必须准备面对特殊情况下可能的失败,导致事务异常终止。
一个例子说明具有事务保护的代码的大致样子:
for (fail = 0;;) {
}
Berkeley DB由五个主要的子系统构成.包括: 存取管理子系统、内存池管理子系统、事务子系统、锁子系统以及日志子系统。其中存取管理子系统作为Berkeley DB数据库进程包内部核心组件,而其他子系统都存在于Berkeley DB数据库进程包的外部。每个子系统支持不同的应用级别。
1.数据存取子系统 数据存取(Access Methods)子系统为创建和访问数据库文件提供了多种支持。Berkeley DB提供了以下四种文件存储方法:哈希文件、B树、定长记录(队列)和变长记录(基于记录号的简单存储方式),应用程序可以从中选择最适合的文件组织结构。程序员创建表时可以使用任意一种结构,并且可以在同一个应用程序中对不同存储类型的文件进行混合操作。
2.内存池管理子系统
3.事务子系统 事务(Transaction)子系统为Berkeley DB提供事务管理功能。它允许把一组对数据库的修改看作一个原子单位,这组操作要么全做,要么全不做。在默认的情况下,系统将提供严格的ACID事务属性,但是应用程序可以选择不使用系统所作的隔离保证。该子系统使用两段锁技术和先写日志策略来保证数据库数据的正确性和一致性。它也可以被应用程序单独使用来对其自身的数据更新进行事务保护。事务子系统适用于需要事务保证数据的修改的应用。
4.锁子系统
5.日志子系统
在这个模型中,应用程序直接调用的是数据存取子系统和事务管理子系统,这两个系统进而调用更下层的内存管理子系统、锁子系统和日志子系统。
Programming model
它直接链接到应用程序中,与应用程序运行于同样的地址空间中。
Programmatic APIs
DB为多种编程语言提供了API接口,其中包括C、C++、Java。
值得一提的是bdb提供dbm样式的接口,以前使用unix Dbm/Ndbm的,只需要换个头文件#include <db.h>,重新编译一下,db效率将成倍的提高。当然我们也可以使用dbm样式的接口编写简单的应用程序,这种接口比较简洁。
也为脚本语言Perl、Tcl、Python和PHP提供了接口。
对apache也以module的方式提供了接口,安装后,可以在写apache api时候直接调用。除了几个函数不一样外,其他都相同。
bdb提供的公用程序:
db_archive
打印出不再使用的日志文件路径名
db_checkpoint
监视和检查数据库日志的守护进程
db_deadlock
当死锁发生时,退出锁定要求
db_dump
把数据库文件转换成db_load能认出的文本文件
db_load
从db_dump产生的文本文件中创建出数据库文件
db_printlog
把数据库日志文件转换成人能读懂的文本
db_recover
在发生错误后,把数据库恢复到一致的状态
db_stat
显示数据库环境统计
db_upgrade
把数据库文件转换成新版本的Berkley DB格式
db_verify
对数据库文件进行一致性检查
db库
许多程序中与db相关的函数都将使db库。
Berkeley DB (三) -- DB Architecture
最新推荐文章于 2025-04-27 12:28:49 发布