Berkeley DB -- DB Architecture
The big picture
前面几章讲了用访问方法快速的存储和取回数据。后面主要讲任何访问方法的应用,它们是线性的和可恢复的在面对系统故障时。
Berkeley DB 底层体系结构:
如上图,应用程序调用访问方法,而访问方法使用底层的共享内存cache放置最近用过的文件页面。
当应用程序需具备恢复能力的时候,它们调用的访问方法必须预先封装在事务字系统中。程序告诉bdb事务的开始和结束点。必须准备面对特殊情况下可能的失败,导致事务异常终止。
一个例子说明具有事务保护的代码的大致样子:
for (fail = 0;;) {
/* Begin the transaction. */
if ((ret = dbenv->txn_begin(dbenv, NULL, &tid, 0)) != 0) {
dbenv->err(dbenv, ret, "dbenv->txn_begin");
exit (1);
}
/* Store the key. */
switch (ret = dbp->put(dbp, tid, &key, &data, 0)) {
case 0:
/* Success: commit the change. */
printf("db: %s: key stored.\n", (char *)key.data);
if ((ret = tid->commit(tid, 0)) != 0) {
dbenv->err(dbenv, ret, "DB_TXN->commit");
exit (1);
}
return (0);
case DB_LOCK_DEADLOCK:
default:
/* Failure: retry the operation. */
if ((t_ret = tid->abort(tid)) != 0) {
dbenv->err(dbenv, t_ret, "DB_TXN->abort");
exit (1);
}
if (fail++ == MAXIMUM_RETRY)
return (ret);
continue;
}
}
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)子系统采用的是先写日志的策略,用于支持事务子系统进行数据恢复,保证数据一致性。它不大可能被应用程序单独使用,只能作为事务子系统的调用模块。 以上几部分构成了整个Berkeley DB数据库系统。各部分的关系如下图所示:
在这个模型中,应用程序直接调用的是数据存取子系统和事务管理子系统,这两个系统进而调用更下层的内存管理子系统、锁子系统和日志子系统。 由于几个子系统相对比较独立,所以应用程序在开始的时候可以指定哪些数据管理服务将被使用。可以全部使用,也可以只用其中的一部分。例如,如果一个应用程序需要支持多用户并发操作,但不需要进行事务管理,那它就可以只用锁子系统而不用事务。有些应用程序可能需要快速的、单用户、没有事务管理功能的B树存储结构,那么应用程序可以使锁子系统和事务子系统失效,这样就会减少开销。
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库。
分享到:
相关推荐
BerkeleyDB 多库联合操作 (Secondary Databases) - **3.1 二级数据库介绍** - **概念解释**:二级数据库是对主数据库的一个索引,用于提高查询效率。 - **应用场景**:快速查找、数据统计等。 - **3.2 创建二级...
DB Architecture—BerkeleyDB - **架构概述**:概述Berkeley DB的整体架构设计。 - **子系统介绍**: - **数据存取子系统**:负责数据的读写操作。 - **内存池管理子系统**:管理数据库的内存使用。 - **事务子...
DB Architecture – Berkeley DB - **架构介绍**: - **3.1 数据存取子系统**:处理数据的读写操作。 - **3.2 内存池管理子系统**:管理数据库运行时使用的内存。 - **3.3 事务子系统**:确保数据一致性。 - **...
- 一些常见的XML数据库产品有eXist-db、Berkeley DB XML、Oracle XML DB等。这些数据库提供了API和查询语言,方便开发者进行操作。 4. **Java Swing**: - Java Swing是Java的一个GUI工具包,用于创建桌面应用...
该章节讨论了Berkeley DB的数据结构、事务管理以及缓存机制。 - **关键点**: - 数据结构的选择对于Berkeley DB的性能至关重要。 - 事务管理确保了数据的一致性和可靠性。 - 缓存机制优化了读写操作的速度。 ###...
本章讨论了Berkeley DB的关键技术特点,如事务管理、并发控制等,并且解释了它在不同应用场景下的优势。 5. **CMake** - Bill Hoffman 和 Kenneth Martin - CMake是一个跨平台的自动化构建系统,用于管理和生成...
4. Berkeley DB Margo Seltzer and Keith Bostic 45 5. CMake Bill Hoffman and Kenneth Martin 67 6. Eclipse Kim Moir 77 7. Graphite Chris Davis 101 8. The Hadoop Distributed File System Robert Chansler, ...
Understand Oracle NoSQL Database architecture and the underlying data storage engine, Oracle Berkeley DB Install and configure Oracle NoSQL Database for optimal performance Develop complex, ...
在深度学习领域,Caffe(Convolutional Architecture for Fast Feature Embedding)是一种广泛使用的开源深度学习框架,由Berkeley Vision and Learning Center(BVLC)开发。Caffe以其速度和效率著称,尤其在图像...
4. Ice源码包所用的第三方产品:ICE中间件依赖于多个第三方开源软件包,如BerkeleyDB、bzip2、OpenSSL等。文档中列举了这些产品,并提供了相应的来源链接,这有助于用户理解ICE背后的技术依赖,并在需要时能够访问...
此外,文档提到了ICE源码包使用了多个第三方产品,包括BerkeleyDB、bzip2/libbzip2、OpenSSL Toolkit等。这些产品各具有特定的用途和授权协议。文档也强调了使用本书和ICE源码包时可能遇到的风险和责任豁免,并提供...
伯克利数据库系统(Berkeley DB,简称BDB)是由Oracle公司开发的一款开源、轻量级、嵌入式式数据库管理系统,广泛应用于多种操作系统环境,包括Linux、Unix和Windows等。它提供了键值对存储模式,适用于需要快速访问...
4. **XML数据库**: 如eXistDB、Berkeley DB XML等,它们专门设计用于存储和检索XML文档。这些数据库通常提供JDBC(Java Database Connectivity)驱动,使得Java开发者可以使用SQL-like查询语言操作XML数据。 5. **...