public static void main(String[] args) throws IOException { DB db = DBMaker.newMemoryDB().make(); // // TreeMap has build in support for lazily loaded values. // In that case each value are not stored inside node, // but in separate record. // // use DB.createTreeMap to create TreeMap with non-default parameters Map map = db.createTreeMap("name").valuesOutsideNodesEnable().make(); map.put("key", "this string is loaded lazily with 'map.get(key)' "); // // Other option for lazily loaded record is to use Atomic.Var. // In this case you have singleton record with name. // As bonus you can update reference in thread-safe atomic manner. // Atomic.Var<String> record = db.createAtomicVar("lazyRecord", "aaa", db.getDefaultSerializer()); record.set("some value"); System.out.println(record.get()); // Last option is to use low level Engine storage directly. // Each stored record gets assigned unique recid (record id), // which is latter used to get or update record. // Your code should store only recid as reference to object. // All MapDB collections are written this way. // insert new record long recid = db.getEngine().put("something", SerializerBase.STRING_NOSIZE); // load record String lazyString = db.getEngine().get(recid, SerializerBase.STRING_NOSIZE); // update record db.getEngine().update(recid, "new value", SerializerBase.STRING_NOSIZE); // I hope this example helped! db.close(); }