Berkeley DB for Java

akbarken發表於2013-09-27

一、關於JE

設計思想:

     直接將要持久化的物件通過諸如IO serialization 的辦法直接儲存到檔案上,並能享有關聯式資料庫系統提供的事務,併發,和高效的好處JE正是居於這一設計思想而孕育出來的,是完全用 Java 設計,執行在應用程式的地址空間中,沒有客戶端/伺服器通訊的開銷,從而使開發人員能夠快速、簡單、可靠地儲存和檢索資訊。

Berkeley DB Java Edition(JE)是一個使用純java編寫的通用的,支援事務的,嵌入式的資料庫。它讓java開發人員可以安全而有效的在程式中儲存和管理任意的資料。 
兩種API:  (
供開發人員選擇和資料庫互動)

  • 直接持久層(DPL:有點類似於Hibernate或JPA一樣的ORM技術,通過DPL你可以很方便持久化任何型別的資料。
  • 基本API(Base API:屬於那種原始的,但是功能十分完善的又很靈活的API。

二、優點

1. 輕鬆快速地資料儲存
Berkeley DB Java 版可以輕鬆快速地儲存資料,而不會導致像其他資料庫中那麼多的開銷。Berkeley DB Java 版與您的應用程式執行在同一 JVM 中的單個 JAR 檔案,因此不需要遠端伺服器。本地快取在記憶體中儲存最活躍的資料以避免了開銷較大的磁碟訪問,並將 JVM 記憶體的使用限制到一個可預測的數量。

2. 可靠地事務處理能力
Berkeley DB Java 版可靠地儲存資料並確保資料完整性。如果系統發生故障,Berkeley DB Java 版將恢復事務資料並根據日誌和資料庫資訊將系統重置為可執行的、一致的狀態。

3. 易於部署
Berkeley DB Java 版是高度可移植的、非常靈活且易於整合。它從一開始就被設計為一個充分利用 Java 環境的純 Java 產品。作為單個 Java 存檔 (JAR) 檔案,它在執行您應用程式的 JVM 中執行。Berkeley DB Java 版旨在通過企業級、純 Java 的資料儲存解決方案為不斷增長的大型 Java 社群提供服務。

三、特性

1.通過“鍵值對”來儲存和檢索資料的

JE中的每條記錄(record)就是一個“鍵值對”,“值”代表了你要儲存並且未來想檢索的資料。“鍵”是你用於查詢資料的索引。這有點像Java中的Map。但是JE是允許一個鍵有多個值的,這就是重複資料(Duplicate Data),如果你使用的是DPL,可以通過次鍵(secondary keys)來實現;如果你使用的是BaseAPI,你可以在開啟資料庫的時候設定允許重複屬性來實現。 
2.支援事務

使用事務可以保證JE中資料的ACID。 
3.JE中有個非常重要的資源是記憶體快取(in-memory cache),對它的設定不當可能會造成記憶體的浪費或是非常頻繁的I/O讀寫。

4. 關於JE中儲存的資料型別(schema)的變化比一般的資料庫複雜。

JE中的每個記錄都是一個鍵值對,那個值實際上就是某個java類的例項。當這個java類發生了改變的時候,如果改變只是新增了幾個欄位之類的簡單改變那還好辦,如果是改變了欄位名,那麼就要使用一些特定的類和方法來轉換了。 
4.關於JE的備份和恢復,這也比我們通常用的資料庫簡單很多。

因為JE的所有資料都是記錄在.log檔案之中,所以大體上我們只要把所有的.log檔案拷貝起來就可以了。關於JE中的.log檔案,有幾點要知道下: 

JE中沒有單獨的“資料檔案”,跟BerkeleyDB C Edition不同的是,JE中所有的事務日誌和記錄資料都儲存在一個檔案中,這就是.log檔案。
②.log檔案是隻能新增的(append only),記錄資料的增刪改都是加添在.log的末尾處。
有一個JE清理器(JE cleaner)會負責回收沒用的磁碟空間。比如發生了很多的刪除和修改之後,一個比較早的.log檔案裡面的資料大部分都沒有用了,這時有一個獨立的執行緒,會把這個檔案中有用的部分複製到最後一個.log檔案末尾處,然後刪除掉那個沒用的.log檔案。
對沒用的.log檔案檔案的刪除只會發生在檢查點(checkpoint)之後。檢查點的執行在預設情況下是發生在寫入了20M的內容到日誌檔案之中的時候

四、例項:

參考:1.http://blog.csdn.net/fupacker/article/category/1155713/2

         2.http://mengyang.iteye.com/blog/1001847

相關文章