Berkeley DB for Java
一、關於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
相關文章
- Python中的Berkeley DB(1):Hello Berkeley DBPython
- Oracle Berkeley DBOracle
- MySQL不再支援Berkeley DB 轉而新增外掛(轉)MySql
- 甲骨文把Berkeley DB的協議更換為AGPL,Web開發者估計要不淡定了協議Web
- Java SE 6 新特性: Java DB 和 JDBC 4.0JavaJDBC
- Sun如何處理PostgreSQL和Java DB?SQLJava
- java操作 mongo DB 資料庫例子JavaGo資料庫
- Berkeley vLLM:算力減半、吞吐增十倍
- Java訪問SSL enabled DB2 DatabaseJavaDB2Database
- Java 連線 DB2的工具類JavaDB2
- 名校AI課推薦 | UC Berkeley《人工智慧導論》AI人工智慧
- Retrieve id of record just inserted into a Java DB (Derby) databaseJavaDatabase
- UC Berkeley EECS是如何培養計算機學生的計算機
- 【springboot】【java】【MySQL】【mybatis】【db】mybatis初體驗Spring BootJavaMySqlMyBatis
- Java呼叫db2cmd命令匯出資料JavaDB2
- UC Berkeley提出新型分散式執行框架Ray:有望取代Spark分散式框架Spark
- 取代Python多程式!高效能分散式執行框架 - Berkeley RayPython分散式框架
- Google投資Berkeley County資料中心 投資總額達到12億美元Go
- DB2建立DB linkDB2
- 【Mongodb】db.stats() 與 db.serverStats() 與 db.collection.stats()MongoDBServer
- UC Berkeley新研究:通過深度學習建模注意點取樣陣列深度學習陣列
- DB SECURITY
- java DB 雙資料來源和資料庫事務配置Java資料庫
- DB2:ksh: db2: not found.DB2
- DB_BLOCK_SIZE and DB_CACHE_SIZE in OracleBloCOracle
- Oracle修改(db_name,db_unique_name, servie_names,db_domain)方法OracleAI
- DB_NAME&TANCE_NAME&DB_UNIQUE_NAME&ORACLE_SID&GLOBAL_NAME&DB_DOMAIN&SERVICE_NAMEOracleAI
- DB2系列之DB2安裝DB2
- Laravel db:seedderLaravel
- UC Berkeley提出變分判別器瓶頸,有效提高對抗學習平衡性
- [DB2]DB2備份和恢復DB2
- [DB2]db2重定向恢復DB2
- db_name和db_unique_name的區別
- DB2 db2look的使用方法DB2
- SQL Anywhere db檔案損壞修復 DB檔案修復 DB資料庫修復SQL資料庫
- Python Uses ibm_db connect to DB2PythonIBMDB2
- DB_NAME DB_UNIQUE_NAME 和 SID 的理解
- db_block_checksum & db_block_checking 的區別BloC