BDB (Berkeley DB)資料庫簡單介紹(轉載)

來源:互聯網
上載者:User

標籤:style   http   io   os   使用   java   ar   檔案   資料   

近期要使用DBD,於是搜了下相關的資料,先貼個科普性的吧:

轉自http://www.javaeye.com/topic/202990

 

DB綜述
DB最初開發的目的是以新的HASH訪問演算法來取代舊的hsearch函數和大量的dbm實現(如AT&T的dbm,Berkeley的ndbm,GNU項目的gdbm),DB的第一個發行版在1991年出現,當時還包括了B+樹資料訪問演算法。在1992年,BSD UNIX第4.4發行版中包括了DB1.85版。基本上覺得這是DB的第一個正式版。在1996年中期,Sleepycat軟體公司成立,提供對DB的商業支援。在這以後,DB得到了廣泛的應用,當前最新版本號碼是4.3.27。

DB支援差點兒全部的現代作業系統,如LINUX、UNIX、WINDOWS等,也提供了豐富的應用程式介面,支援C、C++、JAVA、PERL、TCL、PYTHON、PHP等。DB的應用十分廣泛,在非常多知名的軟體中都能看到其身影。比如參考資料2中作者談到利用DB在LINUX下實現核心級檔案系統;參考資料3中通過實際測試資料說明DB提高了OPENLDAP的效率。LINUX下的軟體包管理器RPM也使用DB管理軟體包相關資料,能夠使用命令file查看RPM資料檔案夾/var/lib/rpm下的檔案,則有形式例如以下的輸出:

Dirnames: Berkeley DB (Btree, version 9, native byte-order) 
Filemd5s: Berkeley DB (Hash, version 8, native byte-order)

值得注意的是DB是嵌入式資料庫系統,而不是常見的關係/對象型資料庫,對SQL語言不支援,也不提供資料庫常見的進階功能,如預存程序,觸發器等。

 

DB的設計思想
DB的設計思想是簡單、小巧、可靠、高效能。假設說一些主流資料庫系統是大而全的話,那麼DB就可稱為小而精。DB提供了一系列應用程式介面(API),調用本身非常easy,應用程式和DB所提供的庫在一起編譯成為可執行程式。這樣的方式從雙方面極大提高了DB的效率。第一:DB庫和應用程式執行在同一個地址空間,沒有client程式和資料庫server之間昂貴的網路通訊開銷,也沒有本地主機處理序之間的通訊;第二:不須要對SQL代碼解碼,對資料的訪問直截了當。

DB對須要管理的資料看法非常easy,DB資料庫包括若干條記錄,每個記錄由keyword和資料(KEY/VALUE)構成。資料能夠是簡單的資料類型,也能夠是複雜的資料類型,比如C語言中結構。DB對資料類型不做不論什麼解釋, 全然由程式猿自行處理,典型的C語言指標的"自由"風格。假設把記錄看成一個有n個欄位的表,那麼第1個欄位為表的主鍵,第2--n個欄位相應了其他資料。DB應用程式通常使用多個DB資料庫,從某種意義上看,也就是關聯式資料庫中的多個表。DB庫非常緊湊,不超過500K,但能夠管理大至256T的資料量。

DB的設計充分體現了UNIX的基於工具的哲學,即若干簡單工具的組合能夠實現強大的功能。DB的每個基礎功能模組都被設計為獨立的,也即意味著其使用領域並不局限於DB本身。比如加鎖子系統能夠用於非DB應用程式的通用操作,記憶體共用緩衝池子系統能夠用於在記憶體中基於頁面的檔案緩衝。

 

DB核心資料結構
資料庫控制代碼結構DB:包括了若干描寫敘述資料庫屬性的參數,如資料庫訪問方法類型、邏輯頁面大小、資料庫名稱等;同一時候,DB結構中包括了大量的資料庫處理函數指標,大多數形式為 (*dosomething)(DB *, arg1, arg2, …)。當中最重要的有open,close,put,get等函數。

資料庫記錄結構DBT:DB中的記錄由keyword和資料構成,keyword和資料都用結構DBT表示。實際上全然能夠把keyword看成特殊的資料。結構中最重要的兩個欄位是 void * data和u_int32_t size,分別相應資料本身和資料的長度。

資料庫遊標結構DBC:遊標(cursor)是資料庫應用中常見概念,其本質上就是一個關於特定記錄的遍曆器。注意到DB支援多重記錄(duplicate records),即多條記錄有同樣keyword,在對多重記錄的處理中,使用遊標是最easy的方式。

資料庫環境控制代碼結構DB_ENV:環境在DB中屬於進階特性,本質上看,環境是多個資料庫的封裝器。當一個或多個資料庫在環境中開啟後,環境能夠為這些資料庫提供多種子系統服務,比如多線/進程處理支援、交易處理支援、高效能支援、日誌恢複支援等。

DB中核心資料結構在使用前都要初始化,隨後能夠調用結構中的函數(指標)完畢各種操作,最後必須關閉資料結構。從設計思想的層面上看,這樣的設計方法是利用面向過程語言實現面對對象編程的一個典範。

 

DB資料訪問演算法
在資料庫領域中,資料訪問演算法相應了資料在硬碟上的儲存格式和操作方法。在編寫應用程式時,選擇合適的演算法可能會在運算速度上提高1個甚至多個數量級。大多數資料庫都選用B+樹演算法,DB也不例外,同一時候還支援HASH演算法、Recno演算法和Queue演算法。接下來,我們將討論這些演算法的特點以及怎樣依據須要儲存資料的特點進行選擇。

B+樹演算法:B+樹是一個平衡樹,keyword有序儲存,而且其結構能隨資料的插入和刪除進行動態調整。為了代碼的簡單,DB沒有實現對keyword的首碼碼壓縮。B+樹支援對資料查詢、插入、刪除的常數級速度。keyword能夠為隨意的資料結構。

HASH演算法:DB中實際使用的是擴充線性HASH演算法(extended linear hashing),能夠依據HASH表的增長進行適當的調整。keyword能夠為隨意的資料結構。

Recno演算法: 要求每個記錄都有一個邏輯紀錄號,邏輯紀錄號由演算法本身產生。實際上,這和關係型資料庫中邏輯主鍵通常定義為int AUTO型是同一個概念。Recho建立在B+樹演算法之上,提供了一個儲存有序資料的介面。記錄的長度能夠為定長或不定長。

Queue演算法:和Recno方式接近, 僅僅只是記錄的長度為定長。資料以定長記錄方式儲存在隊列中,插入操作把記錄插入到隊列的尾部,相比之下插入速度是最快的。

對演算法的選擇首先要看keyword的類型,假設為複雜類型,則僅僅能選擇B+樹或HASH演算法,假設keyword為邏輯記錄號,則應該選擇Recno或Queue演算法。當工作集keyword有序時,B+樹演算法比較合適;假設工作集比較大且基本上keyword為隨機分布時,選擇HASH演算法。Queue演算法僅僅能儲存定長的記錄,在高的並發處理情況下,Queue演算法效率較高;假設是其他情況,則選擇Recno演算法,Recno演算法把資料存放區為一般影像檔案格式。

BDB (Berkeley DB)資料庫簡單介紹(轉載)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.