1、MapDB使用
MapDB是一个基于(Apache 2.0 licensed)开源的Java嵌入式数据库引擎和集合框架。他支持针对Map,Set,Queues,Bitmaps 的范围查询,数据过期,压缩,堆外存储和流的操作。MapDB可能是Java最快的数据库,性能就像操作java中的集合一样。他也支持一些高级功能如:ACID事务,快照和增量备份等。
2.使用
<dependency> <groupId>org.mapdb</groupId> <artifactId>mapdb</artifactId> <version>3.0.7</version> </dependency>
3.测试例子
(1)基于内存的: getMemoryDB 获取到的数据为空
@Test public void putMemoryDB() { DB db = DBMaker.memoryDB().make(); ConcurrentMap map = db.hashMap("map").createOrOpen(); String key = "Hello"; String val = "simple"; map.put(key, val); System.out.println("第1次取值," + map.get(key)); } @Test public void getMemoryDB() { DB db = DBMaker.memoryDB().make(); ConcurrentMap map = db.hashMap("map").createOrOpen(); String key = "Hello"; System.out.println("第1次取值," + map.get(key)); }
result:
putMemoryDB 第1次取值,simple getMemoryDB 第1次取值,null
(2)基于磁盘:
@Test public void putFileDB() { DB db = DBMaker.fileDB("d:/opt/file.db").make(); ConcurrentMap map = db.hashMap("map").createOrOpen(); map.put("something", "here"); System.out.println("putFileDB:" + map.get("something")); db.close(); } @Test public void getFileDB() { DB db = DBMaker.fileDB("d:/opt/file.db").make(); ConcurrentMap map = db.hashMap("map").createOrOpen(); System.out.println("getFileDB:" + map.get("something")); db.close(); }
result:
putFileDB:here getFileDB:here
(3)基于磁盘和内存:
@Test public void putMemoryFileDB() { DB db = DBMaker .fileDB("d:/opt/file.db") .fileMmapEnable() .make(); ConcurrentMap<String,String> map = db .hashMap("testMap", Serializer.STRING, Serializer.STRING) .createOrOpen(); map.put("name", "xiaobai"); db.close(); } @Test public void getMemoryFileDB() { DB db = DBMaker .fileDB("d:/opt/file.db") .fileMmapEnable() .make(); ConcurrentMap<String,String> map = db .hashMap("testMap", Serializer.STRING, Serializer.STRING) .createOrOpen(); System.out.println("getMemoryFileDB:"+map.get("name")); db.close(); }
4.MapDB文档
5.MapDB性能测试
java 堆内存 map 和MapDB 对比