Discussion:
[問題] BerkeleyDB for JAVA的相關問題
(时间太久无法回复)
a***@ptt.cc
2007-07-06 19:17:09 UTC
Permalink
爬了一些文,Javaworld也全文檢索了,甚至也google了許久,
發現Java的programmer好像很少在用 BerkeleyDB 耶?
這個連Google都愛用的小巧可愛的DB
http://www.oracle.com/database/berkeley-db.html
怎麼到了Java世界裡好像爹不疼娘不愛了...:p

最近我在試著實做try它...發現了一些問題,
希望也有在摸的前輩能指點一下迷津...

因為初學乍用,我是以最簡單的類似Hash的方式去操作他,
用最簡單的 <Key, Value> 概念,使用Binding的方法。
八大primitive data 用 TupleBinding裡的getPrimitiveBinding,例如存Long用

EntryBinding myBinding = TupleBinding.getPrimitiveBinding(Long.class);

後來摸出了存放物件的方法,例如

EntryBinding dataBinding = new SerialBinding(classCatalog, MyObject.class);

接著用dataBinding.objectToEntry()來序列化
dataBinding.entryToObject()來反序列化,從DB內取得物件
發現他存取速度真的很快,比MySQL的SELECT * 之類的 Query要來的快太多了!
(簡直就是有如Java內部的HashMap離線版 XD )

但是經由我反覆的insert/delete/update後,問題來了,
我去觀察 Database Environments 底下的 00000000.jdb和je.lck檔案
發現 *.jdb 檔案大小不斷的肥大起來,既使裡面存的筆數一樣,
我新增1000筆再刪除1000筆 *.jdb他老兄還是不斷的在長大!!
請問有無最佳化DB的方式,能把DB裡不必要的增刪資訊給去除掉?
或是當初在設 Environment環境時是不是有哪些參數可以調整?
把Cache調大有用嗎?
還有他的Txn (Transaction)相關的該如何設定?
BerkeleyDB能自動做到多Thread的sync嗎?該Lock時會自動Lock嗎?

以上的問題還有觀念有誤的地方,
希望有摸過的先進不吝指教一番,謝謝囉!


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.31.160.158
IT工人
2007-07-09 06:11:24 UTC
Permalink
※ 引述《***@ptt.cc ()》之銘言:
: 爬了一些文,Javaworld也全文檢索了,甚至也google了許久,
: 發現Java的programmer好像很少在用 BerkeleyDB 耶?
: 這個連Google都愛用的小巧可愛的DB
: http://www.oracle.com/database/berkeley-db.html
: 怎麼到了Java世界裡好像爹不疼娘不愛了...:p
因為它沒爹沒娘 , BerkeleyDB 最後被 Oracle 買去
其實很多不起眼的角落,它都存在著.

: 最近我在試著實做try它...發現了一些問題,
: 希望也有在摸的前輩能指點一下迷津...
: 因為初學乍用,我是以最簡單的類似Hash的方式去操作他,
: 用最簡單的 <Key, Value> 概念,使用Binding的方法。
這是 BerkeleyDB 的最基本的儲存式, 它就是這樣存載記錄的.
: (簡直就是有如Java內部的HashMap離線版 XD )
呵, 他本來這樣來實作的嘛.... 只是不錯嘛,體會很快.
BerkeleyDB 就用 key 的方式在找 Value ^^
回答到這,我才發現你~~居然是我同事 ( BerkeleyDB 用的人好像真的不多)

: 但是經由我反覆的insert/delete/update後,問題來了,
: 我去觀察 Database Environments 底下的 00000000.jdb和je.lck檔案
: 發現 *.jdb 檔案大小不斷的肥大起來,既使裡面存的筆數一樣,
: 我新增1000筆再刪除1000筆 *.jdb他老兄還是不斷的在長大!!
: 請問有無最佳化DB的方式,能把DB裡不必要的增刪資訊給去除掉?
: 或是當初在設 Environment環境時是不是有哪些參數可以調整?
: 把Cache調大有用嗎?
在 environment 上要設定.
Cache 是 Cache 的設定, 加大它 , 檔案會更大了 . 呵~
相關的設定,我已經 try 好放在 SVN 上了. 版上大大如果有需要,再問 archer.

: 還有他的Txn (Transaction)相關的該如何設定?
: BerkeleyDB能自動做到多Thread的sync嗎?該Lock時會自動Lock嗎?
Txn 在 database 呼叫的時候直接丟進去就好了.
BerkeleyDB 呢... 就是用 lib 去 oper BerkeleyDB file.
但 BerkeleyDB in java 和其他的 lib 是不同的.
so... 可以去看看 oracle 上的文章. 雖然不多.
lock的問題可以被參數設定. 就去看看囉...加油.

p.s 真的太忙了 = =, 所以沒辦法在公司回答問題 = =
--
╭──── Origin:<不良牛牧場> bbs.badcow.com.tw (210.200.247.200)─────╮
│  ↘ Welcome to SimFarm BBS -- From : [219.87.131.226] │
╰◣◣◢ ◢◢《不良牛免費撥接→電話:40586000→帳號:zoo→密碼:zoo》 ◣◣◢ ─╯
Loading...