LoginSignup
1
1

More than 5 years have passed since last update.

MapDB - とりあえず触る

Posted at

MapDBとは、Javaのコレクションをファイルに永続化してくれたり、DBのようなトランザクションを提供してくれるライブラリです。
なかなか面白いです。なぜか日本語の情報はほぼないですが・・・。
(ちょっとずつ情報載せていければと思います)

必要なライブラリ

とにもかくにもMapDB触ってみましょう。
MapDBは、jar(mapdb-X.Y.Z.jar)を一つclasspathに追加するだけで使えます。

ファイルベースの永続化をする

以下のサンプルは、"testdb"というデータベース(実体はファイル)に、"collectionName"という名前を付けたMapにデータを格納する例です。("testdb"がDBのインスタンス名、"collectionName"がテーブル名というイメージで良いと思います)
DB#commit のタイミングでファイルに永続化され、DB#rollbackすると永続化されません。

サンプルコード

import java.io.File;
import java.util.concurrent.ConcurrentNavigableMap;

import org.mapdb.DB;
import org.mapdb.DBMaker;

public class MapDBSample1 {

    public static void main(String[] args) {

        // まずは格納するためのDBを作る(すでにあれば使いまわす)
        DB db = DBMaker.newFileDB(new File("testdb"))
                .closeOnJvmShutdown()
                .make();

        // open existing an collection (or create new)
        ConcurrentNavigableMap<Integer, String> map = db.getTreeMap("collectionName");

        System.out.println("#0: " + map);

        map.put(1, "one");
        map.put(2, "two");
        // map.keySet() is now [1,2]

        db.commit(); //persist changes into disk

        System.out.println("#1: " + map);

        map.put(3, "three");

        System.out.println("#2: " + map);

        db.rollback(); // rollback!

        System.out.println("#3: " + map);  // -> rollback後なのでMapにkey=3のデータが無い

        db.close();
    }

}

実行結果(初回)

#0: {}
#1: {1=one, 2=two}
#2: {1=one, 2=two, 3=three}
#3: {1=one, 2=two}

サンプルコードのおおまかな流れ

  • DBの生成(または取得)
    • まずはDMakerというクラスを利用してデータを格納するためのDBを生成しています。(すでに存在するものであれば、そのDBを使いまわします)
DB db = DBMaker.newFileDB(new File("testdb"))
                .closeOnJvmShutdown()
                .make();
  • 操作するオブジェクトの生成(または取得)
    • 操作したいCollectionをDBから取得します。この際にコレクションの名前を指定します。
ConcurrentNavigableMap<Integer, String> map = db.getTreeMap("collectionName");
  • データの登録
    • 普通のコレクションの操作でデータを格納できます
map.put(1, "one");
  • Commit / Rollback
    • commitして永続化領域へ格納します。(またはrollbackして永続化しないようにする)
db.rollback();
  • DBのclose
    • プログラム(アプリケーション)終了時にDBをcloseします
db.close();

サンプルコードを再度実行すると

このプログラムを再度実行すると以下の出力結果が得られます

実行結果(2回目)

#0: {1=one, 2=two}
#1: {1=one, 2=two}
#2: {1=one, 2=two, 3=three}
#3: {1=one, 2=two}

プログラム開始時点で Mapにデータが格納されているのが分かります。
これは初回に永続化されたデータが復元されているということです。

まとめ

MapDBを使うととても簡単にJavaのCollectionを永続化できました。
MapDBは他にもいろいろ機能を持っているので、少しずつ紹介できたらと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1