2012年10月3日 星期三

B+-tree implementation:JDBM3(2012-10-15 修正)

上一篇文章 B+-tree implementation:JDBM 用了初代(XD)的 JDBM 來實作 B+-tree
不過在追蹤原始碼之後,因為 JDBM3 有特別對 serialization 做調校,因此還是想用看看 JDBM3!

使用 JDBM3 時,主要可以分成初次啟動(建立新的檔案)跟開啟之前建好的檔案。
範例如下:
String DATABASE = "people";
String BTREE_NAME = "FamousPeople";

DB db = DBMaker.openFile(DATABASE ).make();
SortedMap tree = null;
if((tree = db.getTreeMap(BTREE_NAME)) == null) {
  tree = db.createTreeMap(BTREE_NAME);
}

在建立 TreeMap 時,JDBM3 提供兩種 createTreeMap() 的參數
一種是全都用預設值,也就是 createTreeMap(String) 的參數
另一種則是可以自定一些需要的參數,例如可以自定 Comparator、Serialization 等等。

開啟或建立 BTree 的檔案之後,接著就是放資料進去以及取得資料了。
// Put key.
tree.put("1", "one");
tree.put("2", "two");
db.commit();

// Get key.
String record = tree.get("1");

其中第四行呼叫 commit() 是因為資料在透過 put() 放入 BTree 時
實際上預設會放進 JDBM3 的 Dirty Cache,也就是會暫存在記憶體上面
依據 JDBM3 的某處說明(我忘了在哪看到的 XD,可能是原始碼的註解?),應該是 JDBM3 會自動定時把資料寫回磁碟
不過如果需要馬上把資料寫回磁碟,就必須透過 commit() 指令。

最後在 BTree 存取完畢以後,依照 JDBM3 首頁的描述,務必要呼叫 close() 將 BTree 檔案關閉
否則同時有兩個以上的 JDBM3 instance 要存取同一個 BTree 檔案時,可能會發生錯誤。
db.close();

而關於檔案儲存的路徑,JDBM3 的存放位置跟 JDBM 是相同的
可以直接在宣告開啟檔案時,直接給完整路徑,就可以把檔案路徑指到需要的位置了。
DBMaker dbMaker = DBMaker.openFile(db_name);

參考資料:
1、JDBM3
2、JDBM

沒有留言: