1. 程式人生 > >Berkeley DB學習(一)

Berkeley DB學習(一)

一、簡介

定義: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();
       }