深入了解mysql它BDB系列(1)
---BDB关基础知识
作者:杨万富
一:BDB体系结构
1.1.BDB体系结构
BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1中相关数)。1)数据存取子系统,2)事务子系统,3)锁子系统。4)内存池管理子系统。5)日志子系统。
在一个应用程序中。并不一定须要全然具备这5大子系统。
假设程序仅仅使用了数据存取子系统,它的体系结构如图1.2。在图1.2中,我们仅仅使了两个子系统:数据存取以及内存池子系统。
(备注:另外三个子系统在BDB系统中隐式调用)
1.2.子系统的介绍
1)数据存取子系统
数据存取子系统提供多种存取数据库文件的方法:1)B树、2)HASH文件、3)定长记录以及4)变长记录。
对于这四种不同的存取类型。BDB系统提供差点儿一致的接口。
比方。要打开一个数据库。都使用DB->open。
有些情况下。为更快的存取效率而不使用事务子系统,数据存取子系统能够单独使用,从而提供更快的存取速度(见图1.2)。
2)事务子系统
事务子系统同意将一系统的操作看作为一个原子操作,或者所有完毕。或者所有取消。
能够依据应用的详细情况,设置事务的隔离级别。
事务子系统能够单独使用。适用于须要符合事务特性的应用。
3)锁子系统
锁子系统为BDB提供锁机制,为系统提供读、写控制。
能够同意多用户同一时候进行读操作,仅仅同意单用户进行排它的改动操作。通过子系统,申请读、写权限。一旦申请成功。便可进行相关操作。事务子系统利用锁机制来实现多个事务的并发控制。
锁子系统能够被应用程序单独使用,为应用提供一个灵活的、高速的、可设置的锁管理。
4)内存池管理子系统
该子系统为多进程(或多线程)共享存取数据提供可能。
须要页数据时,假设数据已经缓冲在内存池中。则直接使用。否则将新的页读到内存池中供用户使用。在必要的时候,将改动的页数据进行刷盘操作。
该子系统能够被应用程序单独使用。
内存池管理子系统为应用提供灵活的、面向页、数据缓冲管理。
5)日志子系统
该子系统採用先写日志先写数据的策略。用于支持事务子系统进行数据恢复。保证数据一致性。
该子系统不能被应用程单独使用,仅仅能做为事务子系统的调用模块。
二:BDB环境(Environment)
2.1.概述
BDB环境是对一个或多个数据库、日志文件以及区域文件的一个封装。区域文件能够理解为共享内存池。用来保存相似缓冲页的BDB环境信息。
仅仅有数据库文件是平台独立的,能够在不同的byte-order机器上进行移动。日志文件能够在同byte-order的机器上进行移动。
可是,区域文件对特定的机器是唯一的,不能与其他类型机器进行日志文件的移动,甚至对于不同版本号的操作系统,尽管机器类型同样却也不能移动。
管理BDB环境最简单的方法就是创建一个home文件夹。在该文件夹中存储须要共享环境的文件。假设须要使用home文件夹(比方文件夹myhome)。必须在应用程序执行之前创建好该文件夹(比方在工作文件夹下创建一个命令为myhome的文件夹),由于BDB本身不会为用户创建home文件夹。BDB环境通过文件夹名进行标识。
一个环境能够被多进程以及多线程共享。一个环境能够引用系统其他文件夹的资源,应用程序经常选择将资源分布到不同的文件夹或者磁盘,以此来提升程序性能。虽然如此。在默认情况下。数据库文件、共享区域(包含锁、日志缓冲区、内存池、事务共享内存区域)以及日志文件存储在一个同层次文件夹中(home文件夹中,能够包含其他的比方,比方在当中创建一个mydata文件夹用来存储用户的数据库文件)。
共享同一个环境的全部应用,它们彼此之间是互相信任的。它们能互相訪问对方的数据。由于这些数据都是放在共享区域中的。
它们共享相似于buffer以及锁之类的资源。与此同一时候。假设多个应用想要使用同一个数据库,而且须要它们之间保持一致性,则必须共享同一个环境。
2.2.创建BDB环境
BDB环境是通过db_env_create以及DB_ENV->open接口来创建和描写叙述的。
在须要定制的地方,比方将日志文件存储到一个单独的磁盘。或者选择一个特定的值做为cache的大小,应用通过环境配置文件或者将參数传递给DB_ENV处理函数来实现定制。
一旦一个环境被创建,被指定相关路径的数据库文件。都将相对环境的home文件夹来创建。
用相对路