アプリケーションでデータをキャッシュして再利用したい。 たとえば、 Mongo などを使えばそれを実現できるけれど、 UNIXのDBMのような、キーとバリューのセットを保存しておきたいだけなので、 もっと簡単に済ませたい。
Java界隈で DBM っぽいそれと言えば、Berkeley DB がかつては定番だった気がする。 もう少し手軽なものはないかと探してみると MapDB がありました。
使い方はとても簡単で、データベースにありがちな open, close 処理や、 データベースが初期されていなければ、初期化処理、そうでなければ・・・といった部分の記述がスッキリかけます。
テストしたい内容を groovy script で書けば、以下のような感じです。
ただし、これは作動しません。
(何かを修正すれば動くのかもしれませんが、こういう感じで使うという確認用擬似コードとして載せておきます。)
@Grab(group='org.mapdb', module='mapdb', version='3.0.5')
import org.mapdb.DBMaker
def cacheDbFile = new File('cache.db')
boolean firstTime = !cacheDbFile.exists()
def db = DBMaker.fileDB(cacheDbFile).closeOnJvmShutdown().make()
def map = db.hashMap("map").createOrOpen()
if( firstTime ){
map.put('key1','hello')
map.put('key2','hello world')
}
else {
println map.get('key1')
println map.get('key2')
}
closeOnJvmShutdown()
を使っておけば、close 処理の記述は不要になります。
groovy script ではうまくいかないようなので、gradle プロジェクトにしたところ、意図通り作動しました。 github mapdb-test project をご覧ください。