Tuesday, June 26, 2018 / Groovy

MapDB: Javaアプリケーションでちょっとしたデータを保存しておきたい場合に便利

アプリケーションでデータをキャッシュして再利用したい。 たとえば、 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 をご覧ください。