Berkeley DB(BDB)介紹

 Berkeley DB是一個開放源代碼的內嵌式數據庫管理系統,能夠爲應用程序提供高性能的數據管理服務。應用它程序員只需要調用一些簡單的API就可以完成對數據的訪問和管理。與常用的數據庫管理系統(如MySQL和Oracle等)有所不同,在Berkeley DB中並沒有數據庫服務器的概念。應用程序不需要事先同數據庫服務建立起網絡連接,而是通過內嵌在程序中的Berkeley DB函數庫來完成對數據的保存、查詢、修改和刪除等操作。

     Berkeley DB(BDB)是一個高性能的,嵌入數據庫編程庫,和C語言, C++, Java, Perl, Python, Tcl以及其他很多語言都有綁定。Berkeley DB可以保存任意類型的鍵/值對,而且可以爲一個鍵保存多個數據。Berkeley DB可以支持數千的併發線程同時操作數據庫。
     Berkeley DB是由美國Sleepycat Software公司開發的一套開放源碼的嵌入式數據庫的程序庫(database library),它爲應用程序提供可伸縮的、高性能的、有事務保護功能的數據管理服務。Berkeley DB爲數據的存取和管理提供了一組簡潔的函數調用API接口。

    它是一個經典的C-library模式的toolkit,爲程序員提供廣泛豐富的函數集,是爲應用程序開發者提供工業級強度的數據庫服務而設計的。Berkeley DB API接口其主要特點如下:

    嵌入式(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項中通過實際應用來封裝字段(列)。

    在物理組織上,每一個數據庫在創建的時候可以由應用程序根據其數據特點來選擇一種合適的存儲結構。Berkeley DB 可供選擇的四種文件存儲結構分別是:哈希文件、B樹、定長記錄(隊列)和變長記錄(基於記錄號的簡單存儲方式)。

    一個物理的文件中可以只存放一個單獨的數據庫,也可以存放若干相關或不相關的數據庫,而且這些數據庫可以分別採用除隊列之外任意不同的組織方式,以隊列組織的數據庫只能單獨存放於一個文件,不能同其他存儲類型混合存放。

    一個文件除了受最大文件長度和存儲空間的約束之外,理論上可以存儲任意多個數據庫。
因此係統定位一個數據庫通常需要兩個參數——“文件名”和“數據庫名”,這也是Berkeley DB不同於一般關係數據庫的地方。

   Berkeley DB存儲系統爲應用程序提供了一系列的接口函數,用於對數據庫的管理和操作。其中包括:
      (1)數據庫的創建、打開、關閉、刪除、重命名等,以及對數據的檢索和增刪改操作;
      (2)提供一些附加的功能,例如讀取數據庫狀態信息、讀取所在文件的信息、讀取所在數據庫環境的信息、清空數據庫的內容、數據庫的同步備份、版本升級、提示出錯信息等等;
      (3)系統還提供了遊標機制,用於存取和訪問成組的數據,以及對兩個或多個相關數據庫進行關聯和等值連接操作;
      (4)系統還給出了一些接口函數用於對存取策略進行優化配置,比如應用程序可以自己設置B樹的排序比較函數、每頁中存放key的最少數目,哈希桶的填充因子、哈希函數、哈希表最大長度,隊列的最大長度,數據庫存放的字節順序,底層存儲頁的大小,內存分配函數,高速緩存的大小,定長記錄的大小和填充位,變長記錄所用的分隔符等等。
 
 Berkeley DB所在公司Sleepycat已經被Oracle收購了,用來對付MySQL,進一步豐富了Oralce的產品線。

Berkeley DB 特點/特性

簡單、小巧、可靠、高性能,小而精。將Berkeley DB和我們的程序共同編譯爲一個程序(嵌入),和我們的程序運行在相同的地址空間,既沒有網絡通信的開銷也沒有進程通信的資源耗費,而且沒有複雜的SQL分析解釋,使用API進行直接了當的訪問,當真是來的直接和快捷。Berkeley DB本身只有幾百K,但卻能支持256TB的數據,還支持上千用戶的併發訪問。
真正的事務支持——可說是其最強大的特性。
多線程/進程處理支持。
支持熱備份。

缺點

任何事務都有其缺點,Berkeley DB也是如此:
Berkeley DB環境不是跨平臺的;而且不支持Windows98/95這樣的老系統。
不可進行網絡共享。
對中斷比較敏感。


數據結構

Berkeley DB和關係數據庫不同,它沒有和關係數據庫中完全對等的表的概念,而只有DBT這樣的東西——就是一個Key/Data對,我們可以把key看作表的主鍵,而Data就是餘下的n-1列。我們可以定義一個結構體,存入Data中,這樣結構體的每個Field就相當於一個字段。Berkeley DB還有遊標(Cursor),有了它,能夠遍歷多條記錄,還能遍歷Key相同的多記錄。而Berkeley DB中最核心的數據結構就是DB了,它代表數據庫,物理上就是.DB文件,我們可以設置其頁面大小,存儲數據的基礎數據結構(平衡二叉樹、哈希表、隊列和記錄)。另外,還有比較複雜的數據庫環境DB_ENV,提供比較高級的功能:事務、多線程、日誌、備份和恢復等。

應用場景

Berkeley DB是專注於某些應用場景的專注型產品,它適合於使用在嵌入式系統或者某些在某些消費類軟件中存儲簡單的數據。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章