天天看點

Berkeley DB 概述

Berkeley DB 概述

皮東

    Berkeley DB是由美國Sleepycat Software公司開發的一套開放源碼的嵌入式資料庫的程式庫(database library),

它為應用程式提供可伸縮的、高性能的、有事務保護功能的資料管理服務。Berkeley DB為資料的存取和管理提供了一組

簡潔的函數調用API接口。

    它是一個經典的C-library模式的toolkit,為程式員提供廣泛豐富的函數集,是為應用程式開發者提供工業級強度的

資料庫服務而設計的。其主要特點如下:

    嵌入式(Embedded):它直接連結到應用程式中,與應用程式運作于同樣的位址空間中,是以,無論是在網絡上不同

計算機之間還是在同一台計算機的不同程序之間,資料庫操作并不要求程序間通訊。

    Berkeley DB為多種程式設計語言提供了API接口,其中包括C、C++、Java、Perl、Tcl、Python和PHP,所有的資料庫操作

都在程式庫内部發生。多個程序,或者同一程序的多個線程可同時使用資料庫,有如各自單獨使用,底層的服務如加鎖、

事務日志、共享緩沖區管理、記憶體管理等等都由程式庫透明地執行。

    輕便靈活(Portable):它可以運作于幾乎所有的UNIX和Linux系統及其變種系統、Windows作業系統以及多種嵌入式實

時作業系統之下。它在32位和64位系統上均可運作,已經被好多高端的網際網路伺服器、桌上型電腦、掌上電腦、機頂盒、網絡

交換機以及其他一些應用領域所采用。一旦Berkeley DB被連結到應用程式中,終端使用者一般根本感覺不到有一個資料庫

系統存在。

    可伸縮(Scalable):這一點表現在很多方面。Database library本身是很精簡的(少于300KB的文本空間),但它

能夠管理規模高達256TB的資料庫。它支援高并發度,成千上萬個使用者可同時操縱同一個資料庫。Berkeley DB能以足夠小

的空間占用量運作于有嚴格限制的嵌入式系統,也可以在高端伺服器上耗用若幹GB的記憶體和若幹TB的磁盤空間。

    Berkeley DB在嵌入式應用中比關系資料庫和面向對象資料庫要好,有以下兩點原因:

    (1)因為資料庫程式庫同應用程式在相同的位址空間中運作,是以資料庫操作不需要程序間的通訊。在一台機器的

不同程序間或在網絡中不同機器間進行程序通訊所花費的開銷,要遠遠大于函數調用的開銷;

    (2)因為Berkeley DB對所有操作都使用一組API接口,是以不需要對某種查詢語言進行解析,也不用生成執行計劃,

大大提高了運作效.

BerkeleyDB系統結構

    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樹存儲結構,那麼應用程式

可以使鎖子系統和事務子系統失效,這樣就會減少開銷。 

BerkeleyDB存儲功能概述    

    Berkeley DB所管理資料的邏輯組織機關是若幹個獨立或有一定關系的資料庫(database),

每個資料庫由若幹記錄組成,這些記錄全都被表示成(key,value)的形式.

    如果把一組相關的(key,value)對也看作一個表的話,那麼每一個資料庫隻允許存放一個table,

這一點不同于一般的關系資料庫。實際上,在Berkeley DB中所提到的“資料庫”,相當于一般關系資料庫系統中的表;

而“key/data”對相當于關系資料庫系統中的行(rows);Berkeley DB不提供關系資料庫中列直接通路的功能,

而是在“key/data”對中的data項中通過實際應用來封裝字段(列)。

    在實體組織上,每一個資料庫在建立的時候可以由應用程式根據其資料特點來選擇一種合适的存儲結構。

可供選擇的四種檔案存儲結構分别是:哈希檔案、B樹、定長記錄(隊列)和變長記錄(基于記錄号的簡單存儲方式)。

    一個實體的檔案中可以隻存放一個單獨的資料庫,也可以存放若幹相關或不相關的資料庫,而且這些資料庫

可以分别采用除隊列之外任意不同的組織方式,以隊列組織的資料庫隻能單獨存放于一個檔案,不能同其他存儲類型混合存放。

    一個檔案除了受最大檔案長度和存儲空間的限制之外,理論上可以存儲任意多個資料庫。

是以系統定位一個資料庫通常需要兩個參數——“檔案名”和“資料庫名”,這也是Berkeley DB不同于

一般關系資料庫的地方。

   Berkeley DB存儲系統為應用程式提供了一系列的接口函數,用于對資料庫的管理和操作。其中包括:

      (1)資料庫的建立、打開、關閉、删除、重命名等,以及對資料的檢索和增删改操作;

      (2)提供一些附加的功能,例如讀取資料庫狀态資訊、讀取所在檔案的資訊、讀取所在資料庫環境的資訊、

清空資料庫的内容、資料庫的同步備份、版本更新、提示出錯資訊等等;

      (3)系統還提供了遊标機制,用于存取和通路成組的資料,以及對兩個或多個相關資料庫進行關聯和等值連接配接操作;

      (4)系統還給出了一些接口函數用于對存取政策進行優化配置,比如應用程式可以自己設定B樹的排序比較函數、

每頁中存放key的最少數目,哈希桶的填充因子、哈希函數、哈希表最大長度,隊列的最大長度,資料庫存放的位元組順序,

底層存儲頁的大小,記憶體配置設定函數,高速緩存的大小,定長記錄的大小和填充位,變長記錄所用的分隔符等等。