Berkeley DB數(shù)據(jù)庫是什么數(shù)據(jù)庫?

2010-08-28 10:54:37來源:西部e網(wǎng)作者:

  Berkeley DB (DB)是一個高性能的,嵌入數(shù)據(jù)庫編程庫,和C語言,C++,Java,Perl,Python,PHP,Tcl以及其他很多語言都有綁定。Berkeley DB可以保存任意類型的鍵/值對,而且可以為一個鍵保存多個數(shù)據(jù)。Berkeley DB可以支持數(shù)千的并發(fā)線程同時操作數(shù)據(jù)庫,支持最大256TB的數(shù)據(jù),廣泛用于各種操作系統(tǒng)包括大多數(shù)Unix類操作系統(tǒng)和Windows操作系統(tǒng)以及實時操作系統(tǒng)。

  2.0版本或以上的Berkeley DB由Sleepycat Software公司開發(fā),并使用基于自由軟件許可協(xié)議/私有許可協(xié)議的雙重授權方式提供[1],附有源代碼。開發(fā)者如果想把Berkeley DB嵌入在私有軟件內(nèi)需要得到Sleepycat公司的許可,若將軟件同樣遵循GPL發(fā)布,則不需許可即可使用。而2.0版本以下的則使用BSD授權,可自由作商業(yè)用途。

  Berkeley DB最初開發(fā)的目的是以新的HASH訪問算法來代替舊的hsearch函數(shù)和大量的dbm實現(xiàn)(如AT&T的dbm,Berkeley的 ndbm,GNU項目的gdbm),Berkeley DB的第一個發(fā)行版在1991年出現(xiàn),當時還包含了B+樹數(shù)據(jù)訪問算法。在1992年,BSD UNIX第4.4發(fā)行版中包含了Berkeley DB1.85版;旧险J為這是Berkeley DB的第一個正式版。在1996年中期,Sleepycat軟件公司成立,提供對Berkeley DB的商業(yè)支持。在這以后,Berkeley DB得到了廣泛的應用,成為一款獨樹一幟的嵌入式數(shù)據(jù)庫系統(tǒng)。2006年Sleepycat公司被Oracle 公司收購,Berkeley DB成為Oracle數(shù)據(jù)庫家族的一員,Sleepycat原有開發(fā)者繼續(xù)在Oracle開發(fā)Berkeley DB,Oracle繼續(xù)原來的授權方式并且加大了對Berkeley DB的開發(fā)力度,繼續(xù)提升了Berkeley DB在軟件行業(yè)的聲譽。Berkeley DB的當前最新發(fā)行版本是4.7.25。

  值得注意的是DB是嵌入式數(shù)據(jù)庫系統(tǒng),而不是常見的關系/對象型數(shù)據(jù)庫,對SQL語言不支持,也不提供數(shù)據(jù)庫常見的高級功能,如存儲過程,觸發(fā)器等。

  Berkeley DB的體系結(jié)構

  Berkeley DB以擁有比Microsoft SQL Server和Oracle等數(shù)據(jù)庫系統(tǒng)而言更簡單的體系結(jié)構而著稱。例如,它不支持網(wǎng)絡訪問—程序通過進程內(nèi)的API訪問數(shù)據(jù)庫。他不支持SQL或者其他的數(shù)據(jù)庫查詢語言,不支持表結(jié)構和數(shù)據(jù)列。 訪問數(shù)據(jù)庫的程序自主決定數(shù)據(jù)如何儲存在記錄里,Berkeley DB不對記錄里的數(shù)據(jù)進行任何包裝,每個記錄有且只有兩部分:鍵、值,所以在Berkeley DB的背景下通常用key/data pair指代一個記錄。記錄和它的鍵都可以達到4G字節(jié)的長度。

  盡管架構很簡單,Berkeley DB卻支持很多高級的數(shù)據(jù)庫特性,比如ACID 數(shù)據(jù)庫事務處理,細粒度鎖,XA接口,熱備份以及同步復制。

  Berkeley DB包含有與某些經(jīng)典Unix數(shù)據(jù)庫編程庫兼容的接口,包括:dbm,ndbm和hsearch。

  Berkeley DB的核心數(shù)據(jù)結(jié)構

  數(shù)據(jù)庫環(huán)境句柄DB_ENV: 每個DB_ENV相當于一個數(shù)據(jù)庫,它包含了數(shù)據(jù)庫全局信息,比如緩沖區(qū)大小、以及對事務、日志、鎖等子系統(tǒng)的全局配置信息。

  數(shù)據(jù)庫句柄結(jié)構DB:每個DB相當于關系數(shù)據(jù)庫的一個表,其中存儲了很多 key/data pair。DB句柄代表了一個包含了若干描述數(shù)據(jù)庫表屬性的參數(shù),如數(shù)據(jù)庫訪問方法類型、邏輯頁面大小、數(shù)據(jù)庫名稱等;同時,DB結(jié)構中包含了大量的數(shù)據(jù)庫處理函數(shù)指針,大多數(shù)形式為 (*dosomething)(DB *, arg1, arg2, …)。其中最重要的有open,close,put,get等函數(shù)。

  數(shù)據(jù)庫記錄結(jié)構DBT:DB中的記錄由關鍵字和數(shù)據(jù)構成,關鍵字和數(shù)據(jù)都用結(jié)構DBT表示。實際上完全可以把關鍵字看成特殊的數(shù)據(jù)。結(jié)構中最重要的兩個字段是 void * data和u_int32_t size,分別對應數(shù)據(jù)本身和數(shù)據(jù)的長度。

  數(shù)據(jù)庫游標結(jié)構DBC:游標(cursor)是數(shù)據(jù)庫應用中常見概念,其本質(zhì)上就是一個關于特定記錄的遍歷器。注意到DB支持多重記錄(duplicate records),即多條記錄有相同關鍵字,在對多重記錄的處理中,使用游標是最容易的方式。

  數(shù)據(jù)庫環(huán)境句柄結(jié)構DB_ENV:環(huán)境在DB中屬于高級特性,本質(zhì)上看,環(huán)境是多個數(shù)據(jù)庫的包裝器。當一個或多個數(shù)據(jù)庫在環(huán)境中打開后,環(huán)境可以為這些數(shù)據(jù)庫提供多種子系統(tǒng)服務,例如多線/進程處理支持、事務處理支持、高性能支持、日志恢復支持等。

  DB中核心數(shù)據(jù)結(jié)構在使用前都要初始化,隨后可以調(diào)用結(jié)構中的函數(shù)(指針)完成各種操作,最后必須關閉數(shù)據(jù)結(jié)構。從設計思想的層面上看,這種設計方法是利用面向過程語言實現(xiàn)面對對象編程的一個典范。

  Berkeley DB數(shù)據(jù)訪問算法

  在數(shù)據(jù)庫領域中,數(shù)據(jù)訪問算法對應了數(shù)據(jù)在硬盤上的存儲格式和操作方法。在編寫應用程序時,選擇合適的算法可能會在運算速度上提高1個甚至多個數(shù)量級。大多數(shù)數(shù)據(jù)庫都選用B+樹算法,DB也不例外,同時還支持HASH算法、Recno算法和 Queue算法。接下來,我們將討論這些算法的特點以及如何根據(jù)需要存儲數(shù)據(jù)的特點進行選擇。

  B+樹算法

  B+樹是一個平衡樹,關鍵字有序存儲,并且其結(jié)構能隨數(shù)據(jù)的插入和刪除進行動態(tài)調(diào)整。為了代碼的簡單,DB沒有實現(xiàn)對關鍵字的前綴碼壓縮。B+樹支持對數(shù)據(jù)查詢、插入、刪除的常數(shù)級速度。關鍵字可以為任意的數(shù)據(jù)結(jié)構.

  HASH算法

  DB中實際使用的是擴展線性HASH算法(extended linear hashing),可以根據(jù)HASH表的增長進行適當?shù)恼{(diào)整。關鍵字可以為任意的數(shù)據(jù)結(jié)構。

  要求每一個記錄都有一個邏輯紀錄號,邏輯紀錄號由算法本身生成。實際上,這和關系型數(shù)據(jù)庫中邏輯主鍵通常定義為int AUTO型是同一個概念。Recho建立在B+樹算法之上,提供了一個存儲有序數(shù)據(jù)的接口。記錄的長度可以為定長或不定長。和Recno方式接近, 只不過記錄的長度為定長。數(shù)據(jù)以定長記錄方式存儲在隊列中,插入操作把記錄插入到隊列的尾部,相比之下插入速度是最快的。

  對算法的選擇首先要看關鍵字的類型,如果為復雜類型,則只能選擇B+樹或HASH算法,如果關鍵字為邏輯記錄號,則應該選擇Recno或Queue算法。當工作集關鍵字有序時,B+樹算法比較合適;如果工作集比較大且基本上關鍵字為隨機分布時,選擇HASH算法。Queue算法只能存儲定長的記錄,在高的并發(fā)處理情況下,Queue算法效率較高;如果是其它情況,則選擇Recno算法,Recno 算法把數(shù)據(jù)存儲為平面文件格式。

  Berkeley DB的資源鏈接:

  官方主頁:http://www.oracle.com/database/berkeley-db/db/index.html

  產(chǎn)品下載:http://www.oracle.com/technology/software/products/berkeley-db/index.html

  官方開發(fā)者文檔中心:http://www.oracle.com/technology/documentation/berkeley-db/db/index.html

  產(chǎn)品技術信息: http://www.oracle.com/technology/products/berkeley-db/pdf/berkeley-db-family-datasheet.pdf

  http://www.oracle.com/database/docs/berkeley-db-datasheet.pdf

  http://www.oracle.com/database/docs/Berkeley-DB-v-Relational.pdf

 

贊助商鏈接: