设为首页 加入收藏

TOP

MapDB使用入门(一)
2019-09-18 11:14:57 】 浏览:145
Tags:MapDB 使用 入门

背景

MapDB官网:http://www.mapdb.org

官方翻译之后的话:MapDB基于堆外存储、磁盘存储提供了Java的Maps、Sets、Lists、Queues等功能。它混合了Java集合框架和数据库引擎。它是基于Apache许可的免费的、开源的。

个人觉得:MapDB是一个轻量级的本地缓存的框架,它既可以使用对外存储,也可以使用磁盘存储(重启时数据不丢失)。它还提供事务的功能。

开发文档:https://jankotek.gitbooks.io/mapdb/content/quick-start/

开发机器配置:i5-9400 6c6t,32g内存,固态硬盘

MapDB入门实战

1、引入jar包

<!-- https://mvnrepository.com/artifact/org.mapdb/mapdb -->
<dependency>
    <groupId>org.mapdb</groupId>
    <artifactId>mapdb</artifactId>
    <version>3.0.7</version>
</dependency>

 

2、基于堆外存储的Hello,Simple

    /**
     * 堆外内存map
     */
    public static void offHeapMapTest1() {
        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));
    }

执行结果:

--Hello,simple----
第1次取值,simple

2.1、插曲

刚开始执行的时候,总是报下面的异常

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/collections/impl/list/mutable/primitive/LongArrayList
    at org.mapdb.StoreDirectAbstract.<init>(StoreDirectAbstract.kt:41) at org.mapdb.StoreDirect.<init>(StoreDirect.kt:30) at org.mapdb.StoreDirect$Companion.make(StoreDirect.kt:57) at org.mapdb.StoreDirect$Companion.make$default(StoreDirect.kt:56) at org.mapdb.DBMaker$Maker.make(DBMaker.kt:450) at me.lovegao.mapdb.hello.HelloWorldDemo.offHeapMapTest1(HelloWorldDemo.java:18) at me.lovegao.mapdb.hello.HelloWorldDemo.main(HelloWorldDemo.java:11) Caused by: java.lang.ClassNotFoundException: org.eclipse.collections.impl.list.mutable.primitive.LongArrayList at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 7 more

 我以为是jar包没加全,又加了Eclipse相关的jar包,发现还是这样。对着项目又是清理,又是重新编译,又是重新导包,发现都不行。

仔细看了maven的依赖,都是存在的,看MapDB的文档,也说上面那个配置包含全部的。

最后,索性把本地相关的jar包都删了,让maven重新下,最终正常了。

3、基于磁盘的Hello,Simple

基于磁盘存储的,为了保证数据的完整性,需要在关闭虚拟机前关闭DB。

public static void fileMapTest1() {
    DB db = DBMaker.fileDB("file.db").make();
    ConcurrentMap map = db.hashMap("map").createOrOpen();
    String key = "something";
    String val = "here";
    map.put(key, val);
    System.out.println("第1次取值," +map.get(key));
    db.close();
    System.out.println("----------重新打开----------");
    db = DBMaker.fileDB("file.db").make();
    map = db.hashMap("map").createOrOpen();
    System.out.println("第2次取值," +map.get(key));
    db.close();
}

 

执行结果:

--Hello,simple----
第1次取值,simple
----------重新打开----------
第2次取值,simple

结果符合预期。

3.1、基于磁盘的,内存映射的使用

/**
 * 在64位操作系统中,开启内存映射
 * 个性化序列化
 */
public static void fileMapMemoryMapTest() {
    DB db = DBMaker
        .fileDB("file.db")
        .fileMmapEnable()
        .make();
    ConcurrentMap<String,Long> map = db
        .hashMap("mapsl", Serializer.STRING, Serializer.LONG)
        .createOrOpen();
    long val = 51;
    map.put(DEMO_KEY, val);
    System.ou
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇MySQL · 引擎特性 · Buffer Poo.. 下一篇大数据技术原理与运用知识

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目