Berkeley DB學習(一)
阿新 • • 發佈:2018-12-20
一、簡介
定義:Berkeley DB是一個開源的檔案資料庫,介於關係資料庫與記憶體資料庫之間,使用方式與記憶體資料庫類似,它提供的是一系列直接訪問資料庫的函式,而不是像關係資料庫那樣需要網路通訊、SQL解析等步驟。
1)開源的kv型別資料庫
2)檔案資料庫:
優點:資料儲存在單一檔案中,部署以及釋出簡單,使用內嵌在應用程式中。
缺點:資料庫開啟時,檔案會被載入到記憶體,因為資料庫不宜過大。
3)嵌入式資料庫,提供一系列API,呼叫簡單。
DB庫和應用程式可一起編譯成為可執行程式
4)基於3,DB庫和應用程式在同一個地址空間,所以DB庫無網路通訊模組。
5)基於3,不支援對SQL程式碼解碼,可以直接訪問資料。後期支援部分SQL
6)提供多程式語言呼叫的各個版本
二、產生背景:
開發目的:以新的HASH訪問演算法來代替舊的hsearch函式和大量的dbm實現(如AT&T的dbm,Berkeley的 ndbm,GNU專案的gdbm)
開發者:Sleepycat公司,06年被Oracle 公司收購,Berkeley DB成為Oracle資料庫家族的一員,Sleepycat原有開發者繼續在Oracle開發Berkeley DB,Oracle繼續原來的授權方式並且加大了對Berkeley DB的開發力度,繼續提升了Berkeley DB在軟體行業的聲譽。Berkeley DB的當前最新發行版本是6.4.9。
三、使用:
(1)maven依賴新增:
<!-- 加入java bdb 3.3.75/6.4依賴 -->
<dependency>
<groupId>com.sleepycat</groupId>
<artifactId>je</artifactId>
<version>3.3.75</version>
</dependency>
<!-- 專業下載bdb依賴新增的倉庫源 -->
<repository>
<id>oracleReleases</id>
<name>Oracle Released Java Packages</name>
<url>http://download.oracle.com/maven</url>
<layout>default</layout>
</repository>
(2)基本API應用:
資料庫環境變數配置
/**
*初始化資料庫引數
*/
//資料庫所在的儲存資料夾
String dbEnvFilePath="bdb";
//資料庫名稱
String database="weibo";
//環境變數的宣告
Environment myDbEnvironment=null;
//資料庫操作的物件宣告
Database weiboDatabse=null;
try{
//初始化資料儲存根目錄資料夾
File f=new File(dbEnvFilePath);
if(!f.exists()){
f.mkdirs;
}
//資料庫配置變數初始化
DatabaseConfig dbConfig=new DatabaseConfig();
//開啟資料庫
dbConfig.seteAllowCreate(true);
//初始化環境變數配置,基於該變數去配置環境變數
EnvironmentConfig envConfig=new EnvironmentConfig();
//當使用的資料庫配置變數不存在的時候,就自動建立
envConfig.setAllowCreate(true);
//正式初始化資料庫的環境
myDbEnvironment=new Environment(f,envConfig);
//開啟一個數據庫,如果不存在,就自動建立你
weiboDatabase=myDaEnvironment.openDatabase(null,database,dbConfig);
}catch(Exception e){
e.printStackTrace();
}
資料庫CRUD操作-——建立create
weiboDatabase=myDbEnvironment.openDatbase(null,database,dbConfig);
資料庫CRUD操作-——增加add
//儲存資料
//資料的key
String akey="key1";
//資料的value
String aData="data";
try{
//將key和value都封裝到DatabaseEntry中
DatabaseEntry theKey=new DatabaseEntry(aKey.getBytes("UTF-8"));
DatabaseEntry theData=new DatabaseEntry(aData.getBytes("UTF-8"));
//寫入資料庫
weiboDatabase.put(null,theKey,theData);
//對該庫進行count操作,檢視有多少條資料
System.out.println(weiboDatbase.count());
}catch(Exception e){
e.printStackTrace();
}
資料庫CRUD操作-——讀取read
//讀取資料
//要讀取資料的key
aKey="key1";
try{
//將讀取資料的key封裝到DatabaseEntry中
DatabaseEntry theKey=new DatabaseEntry(aKey.getBytes("UTF-8"));
DatabaseEntry theData=new DatabaseEntry();
//執行讀取操作
weiboDatabase.get(null,theKsy,theData,LockMode.DEFAULT);
//將二進位制資料轉換為字串值
String result=new String(theData.getData(),"UTF-8");
//列印
System.out.println(result);
}catch(Exception e){
e.printStackTrace();
}
資料庫CRUD操作-——刪除Delete
//刪除資料
//要刪除的資料key
aKey="key1";
try{
//將要刪除資料的key封裝到DatabaseEntry中
DatabaseEntry theKey=new DatabaseEntry(aKey.getBytes("UTF-8"));
//執行刪除操作
weiboDatabase.delete(null, theKey);
//檢視資料庫當前的記錄數
System.out.println(weiboDatabase.count());
}catch (Exception e) {
e.printStackTrace();
}
關閉資料庫
// 關閉
try {
//先關閉資料庫
if (weiboDatabase != null) {
weiboDatabase.close();
}
//再關閉BDB系統環境變數
if (myDbEnvironment != null) {
myDbEnvironment.sync();
myDbEnvironment.cleanLog();
// 在關閉環境前清理下日誌
myDbEnvironment.close();
}
} catch (Exception e) {
e.printStackTrace();
}