皮東
??? Berkeley DB是由美國Sleepycat Software公司開發(fā)的一套開放源碼的嵌入式數(shù)據(jù)庫的程序庫(database library),
它為應(yīng)用程序提供可伸縮的、高性能的、有事務(wù)保護(hù)功能的數(shù)據(jù)管理服務(wù)。Berkeley DB為數(shù)據(jù)的存取和管理提供了一組
簡潔的函數(shù)調(diào)用API接口。
??? 它是一個經(jīng)典的C-library模式的toolkit,為程序員提供廣泛豐富的函數(shù)集,是為應(yīng)用程序開發(fā)者提供工業(yè)級強(qiáng)度的
數(shù)據(jù)庫服務(wù)而設(shè)計的。其主要特點(diǎn)如下:
??? 嵌入式(Embedded):它直接鏈接到應(yīng)用程序中,與應(yīng)用程序運(yùn)行于同樣的地址空間中,因此,無論是在網(wǎng)絡(luò)上不同
計算機(jī)之間還是在同一臺計算機(jī)的不同進(jìn)程之間,數(shù)據(jù)庫操作并不要求進(jìn)程間通訊。
??? Berkeley DB為多種編程語言提供了API接口,其中包括C、C++、Java、Perl、Tcl、Python和PHP,所有的數(shù)據(jù)庫操作
都在程序庫內(nèi)部發(fā)生。多個進(jìn)程,或者同一進(jìn)程的多個線程可同時使用數(shù)據(jù)庫,有如各自單獨(dú)使用,底層的服務(wù)如加鎖、
事務(wù)日志、共享緩沖區(qū)管理、內(nèi)存管理等等都由程序庫透明地執(zhí)行。
??? 輕便靈活(Portable):它可以運(yùn)行于幾乎所有的UNIX和Linux系統(tǒng)及其變種系統(tǒng)、Windows操作系統(tǒng)以及多種嵌入式實(shí)
時操作系統(tǒng)之下。它在32位和64位系統(tǒng)上均可運(yùn)行,已經(jīng)被好多高端的因特網(wǎng)服務(wù)器、臺式機(jī)、掌上電腦、機(jī)頂盒、網(wǎng)絡(luò)
交換機(jī)以及其他一些應(yīng)用領(lǐng)域所采用。一旦Berkeley DB被鏈接到應(yīng)用程序中,終端用戶一般根本感覺不到有一個數(shù)據(jù)庫
系統(tǒng)存在。
??? 可伸縮(Scalable):這一點(diǎn)表現(xiàn)在很多方面。Database library本身是很精簡的(少于300KB的文本空間),但它
能夠管理規(guī)模高達(dá)256TB的數(shù)據(jù)庫。它支持高并發(fā)度,成千上萬個用戶可同時操縱同一個數(shù)據(jù)庫。Berkeley DB能以足夠小
的空間占用量運(yùn)行于有嚴(yán)格約束的嵌入式系統(tǒng),也可以在高端服務(wù)器上耗用若干GB的內(nèi)存和若干TB的磁盤空間。
??? Berkeley DB在嵌入式應(yīng)用中比關(guān)系數(shù)據(jù)庫和面向?qū)ο髷?shù)據(jù)庫要好,有以下兩點(diǎn)原因:
???
??? (1)因為數(shù)據(jù)庫程序庫同應(yīng)用程序在相同的地址空間中運(yùn)行,所以數(shù)據(jù)庫操作不需要進(jìn)程間的通訊。在一臺機(jī)器的
不同進(jìn)程間或在網(wǎng)絡(luò)中不同機(jī)器間進(jìn)行進(jìn)程通訊所花費(fèi)的開銷,要遠(yuǎn)遠(yuǎn)大于函數(shù)調(diào)用的開銷;
??? (2)因為Berkeley DB對所有操作都使用一組API接口,因此不需要對某種查詢語言進(jìn)行解析,也不用生成執(zhí)行計劃,
大大提高了運(yùn)行效.
BerkeleyDB系統(tǒng)結(jié)構(gòu)
??? Berkeley DB由五個主要的子系統(tǒng)構(gòu)成.包括: 存取管理子系統(tǒng)、內(nèi)存池管理子系統(tǒng)、事務(wù)子系統(tǒng)、鎖子系統(tǒng)以及日志子系統(tǒng)。
其中存取管理子系統(tǒng)作為Berkeley DB數(shù)據(jù)庫進(jìn)程包內(nèi)部核心組件,而其他子系統(tǒng)都存在于Berkeley DB數(shù)據(jù)庫進(jìn)程包的外部。??
??? 每個子系統(tǒng)支持不同的應(yīng)用級別。
??? 1.數(shù)據(jù)存取子系統(tǒng)
??? 數(shù)據(jù)存取(Access Methods)子系統(tǒng)為創(chuàng)建和訪問數(shù)據(jù)庫文件提供了多種支持。Berkeley DB提供了以下四種文件存儲方法:
哈希文件、B樹、定長記錄(隊列)和變長記錄(基于記錄號的簡單存儲方式),應(yīng)用程序可以從中選擇最適合的文件組織結(jié)構(gòu)。
程序員創(chuàng)建表時可以使用任意一種結(jié)構(gòu),并且可以在同一個應(yīng)用程序中對不同存儲類型的文件進(jìn)行混合操作。
??? 在沒有事務(wù)管理的情況下,該子系統(tǒng)中的模塊可單獨(dú)使用,為應(yīng)用程序提供快速高效的數(shù)據(jù)存取服務(wù)。
數(shù)據(jù)存取子系統(tǒng)適用于不需事務(wù)只需快速格式文件訪問的應(yīng)用。
??? 2.內(nèi)存池管理子系統(tǒng)
??? 內(nèi)存池(Memory pool)子系統(tǒng)對Berkeley DB所使用的共享緩沖區(qū)進(jìn)行有效的管理。它允許同時訪問數(shù)據(jù)庫的多個進(jìn)程或者
進(jìn)程的多個線程共享一個高速緩存,負(fù)責(zé)將修改后的頁寫回文件和為新調(diào)入的頁分配內(nèi)存空間。
???
??? 它也可以獨(dú)立于Berkeley DB系統(tǒng)之外,單獨(dú)被應(yīng)用程序使用,為其自己的文件和頁分配內(nèi)存空間。
內(nèi)存池管理子系統(tǒng)適用于需要靈活的、面向頁的、緩沖的共享文件訪問的應(yīng)用。
??? 3.事務(wù)子系統(tǒng)
??? 事務(wù)(Transaction)子系統(tǒng)為Berkeley DB提供事務(wù)管理功能。它允許把一組對數(shù)據(jù)庫的修改看作一個原子單位,
這組操作要么全做,要么全不做。在默認(rèn)的情況下,系統(tǒng)將提供嚴(yán)格的ACID事務(wù)屬性,但是應(yīng)用程序可以選擇不使用系統(tǒng)所作的
隔離保證。該子系統(tǒng)使用兩段鎖技術(shù)和先寫日志策略來保證數(shù)據(jù)庫數(shù)據(jù)的正確性和一致性。
??? 它也可以被應(yīng)用程序單獨(dú)使用來對其自身的數(shù)據(jù)更新進(jìn)行事務(wù)保護(hù)。事務(wù)子系統(tǒng)適用于需要事務(wù)保證數(shù)據(jù)的修改的應(yīng)用。
???
??? 4.鎖子系統(tǒng)
??? 鎖(Locking)子系統(tǒng)為Berkeley DB提供鎖機(jī)制,為系統(tǒng)提供多用戶讀取和單用戶修改同一對象的共享控制。
數(shù)據(jù)存取子系統(tǒng)可利用該子系統(tǒng)獲得對頁或記錄的讀寫權(quán)限;事務(wù)子系統(tǒng)利用鎖機(jī)制來實(shí)現(xiàn)多個事務(wù)的并發(fā)控制。
???
??? 該子系統(tǒng)也可被應(yīng)用程序單獨(dú)采用。鎖子系統(tǒng)適用于一個靈活的、快速的、可設(shè)置的鎖管理器。
???
??? 5.日志子系統(tǒng)???
??? 日志(Logging)子系統(tǒng)采用的是先寫日志的策略,用于支持事務(wù)子系統(tǒng)進(jìn)行數(shù)據(jù)恢復(fù),保證數(shù)據(jù)一致性。
它不大可能被應(yīng)用程序單獨(dú)使用,只能作為事務(wù)子系統(tǒng)的調(diào)用模塊。
??? 以上幾部分構(gòu)成了整個Berkeley DB數(shù)據(jù)庫系統(tǒng)。各部分的關(guān)系如下圖所示:
???
??? 在這個模型中,應(yīng)用程序直接調(diào)用的是數(shù)據(jù)存取子系統(tǒng)和事務(wù)管理子系統(tǒng),這兩個系統(tǒng)進(jìn)而調(diào)用更下層的內(nèi)存管理子系統(tǒng)、
鎖子系統(tǒng)和日志子系統(tǒng)。
???
??? 由于幾個子系統(tǒng)相對比較獨(dú)立,所以應(yīng)用程序在開始的時候可以指定哪些數(shù)據(jù)管理服務(wù)將被使用。可以全部使用,
也可以只用其中的一部分。例如,如果一個應(yīng)用程序需要支持多用戶并發(fā)操作,但不需要進(jìn)行事務(wù)管理,那它就可以
只用鎖子系統(tǒng)而不用事務(wù)。有些應(yīng)用程序可能需要快速的、單用戶、沒有事務(wù)管理功能的B樹存儲結(jié)構(gòu),那么應(yīng)用程序
可以使鎖子系統(tǒng)和事務(wù)子系統(tǒng)失效,這樣就會減少開銷。?
BerkeleyDB存儲功能概述????
???
??? Berkeley DB所管理數(shù)據(jù)的邏輯組織單位是若干個獨(dú)立或有一定關(guān)系的數(shù)據(jù)庫(database),
每個數(shù)據(jù)庫由若干記錄組成,這些記錄全都被表示成(key,value)的形式.
??? 如果把一組相關(guān)的(key,value)對也看作一個表的話,那么每一個數(shù)據(jù)庫只允許存放一個table,
這一點(diǎn)不同于一般的關(guān)系數(shù)據(jù)庫。實(shí)際上,在Berkeley DB中所提到的“數(shù)據(jù)庫”,相當(dāng)于一般關(guān)系數(shù)據(jù)庫系統(tǒng)中的表;
而“key/data”對相當(dāng)于關(guān)系數(shù)據(jù)庫系統(tǒng)中的行(rows);Berkeley DB不提供關(guān)系數(shù)據(jù)庫中列直接訪問的功能,
而是在“key/data”對中的data項中通過實(shí)際應(yīng)用來封裝字段(列)。
??? 在物理組織上,每一個數(shù)據(jù)庫在創(chuàng)建的時候可以由應(yīng)用程序根據(jù)其數(shù)據(jù)特點(diǎn)來選擇一種合適的存儲結(jié)構(gòu)。
可供選擇的四種文件存儲結(jié)構(gòu)分別是:哈希文件、B樹、定長記錄(隊列)和變長記錄(基于記錄號的簡單存儲方式)。
??? 一個物理的文件中可以只存放一個單獨(dú)的數(shù)據(jù)庫,也可以存放若干相關(guān)或不相關(guān)的數(shù)據(jù)庫,而且這些數(shù)據(jù)庫
可以分別采用除隊列之外任意不同的組織方式,以隊列組織的數(shù)據(jù)庫只能單獨(dú)存放于一個文件,不能同其他存儲類型混合存放。
??? 一個文件除了受最大文件長度和存儲空間的約束之外,理論上可以存儲任意多個數(shù)據(jù)庫。
因此系統(tǒng)定位一個數(shù)據(jù)庫通常需要兩個參數(shù)——“文件名”和“數(shù)據(jù)庫名”,這也是Berkeley DB不同于
一般關(guān)系數(shù)據(jù)庫的地方。
?? Berkeley DB存儲系統(tǒng)為應(yīng)用程序提供了一系列的接口函數(shù),用于對數(shù)據(jù)庫的管理和操作。其中包括:
????? (1)數(shù)據(jù)庫的創(chuàng)建、打開、關(guān)閉、刪除、重命名等,以及對數(shù)據(jù)的檢索和增刪改操作;
????? (2)提供一些附加的功能,例如讀取數(shù)據(jù)庫狀態(tài)信息、讀取所在文件的信息、讀取所在數(shù)據(jù)庫環(huán)境的信息、
清空數(shù)據(jù)庫的內(nèi)容、數(shù)據(jù)庫的同步備份、版本升級、提示出錯信息等等;
????? (3)系統(tǒng)還提供了游標(biāo)機(jī)制,用于存取和訪問成組的數(shù)據(jù),以及對兩個或多個相關(guān)數(shù)據(jù)庫進(jìn)行關(guān)聯(lián)和等值連接操作;
????? (4)系統(tǒng)還給出了一些接口函數(shù)用于對存取策略進(jìn)行優(yōu)化配置,比如應(yīng)用程序可以自己設(shè)置B樹的排序比較函數(shù)、
每頁中存放key的最少數(shù)目,哈希桶的填充因子、哈希函數(shù)、哈希表最大長度,隊列的最大長度,數(shù)據(jù)庫存放的字節(jié)順序,
底層存儲頁的大小,內(nèi)存分配函數(shù),高速緩存的大小,定長記錄的大小和填充位,變長記錄所用的分隔符等等。
????
轉(zhuǎn)自(http://dev.csdn.net/article/39/39637.shtm)
posted on 2006-12-14 10:21
Sword.Hell blog 閱讀(483)
評論(1) 編輯 收藏 引用 所屬分類:
使用Berkeley DB