第一篇:从0到1了解数据库——以MapDB为例

简介: 第一篇:从0到1了解数据库——以MapDB为例

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文档

MapDB中文文档

MapDB - MapDB

5.MapDB性能测试

java 堆内存 map 和MapDB 对比


相关文章
|
存储 Java 数据库
Java嵌入式数据库-MapDB
MapDB可以直接将Java的数据类型存储至直接内存而非JVM的堆中,也可以将数据持久化到磁盘。 与文无关 今天和大家介绍一个Java的第三方库,MapDB,它是用Kotlin写的,据说代码质量还不错,有兴趣的可以阅读其源码。
|
存储 缓存 Java
EhCache-配置和SpringBoot整合
EhCache-配置和SpringBoot整合
EhCache-配置和SpringBoot整合
|
9月前
|
存储 缓存 监控
LangChain4j 详细教程
LangChain4j 详细教程
3885 7
|
SQL Java 关系型数据库
mybatis-plus启动时自动执行sql脚本
mybatis-plus启动时自动执行sql脚本
595 1
|
存储 SQL Java
Java实现关键字模糊查询的高效方法及实践
实现关键字模糊查询的方法有多种,每种方法都有其适用场景。在选择合适的方法时,应考虑实际需求、数据量大小、性能要求等因素。正则表达式适用于处理简单文本或小数据集;数据库模糊查询适用于存储在RDBMS中的数据;而第三方库,则适合需要进行复杂搜索的大型项目。选用合适的工具,可以有效提升搜索功能的性能和用户体验。
659 3
|
XML 缓存 NoSQL
玩转Spring Cache --- 整合进程缓存之王Caffeine Cache和Ehcache3.x【享学Spring】(下)
玩转Spring Cache --- 整合进程缓存之王Caffeine Cache和Ehcache3.x【享学Spring】(下)
|
Arthas 测试技术 网络安全
The telnet port 3658 is used by process
是否在本地使用Arthas的时候,遇到The telnet port 3658 is used by process 34725 instead of target process 44848, you will connect to an unexpected process的异常,其实解决方法很简单。
2824 0
The telnet port 3658 is used by process
|
缓存 NoSQL Java
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
Spring Cache 是 Spring 提供的简易缓存方案,支持本地与 Redis 缓存。通过添加 `spring-boot-starter-data-redis` 和 `spring-boot-starter-cache` 依赖,并使用 `@EnableCaching` 开启缓存功能。JetCache 由阿里开源,功能更丰富,支持多级缓存和异步 API,通过引入 `jetcache-starter-redis` 依赖并配置 YAML 文件启用。Layering Cache 则提供分层缓存机制,需引入 `layering-cache-starter` 依赖并使用特定注解实现缓存逻辑。
3618 1
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
|
缓存 NoSQL Java
【JetCache】JetCache的使用方法与步骤
【JetCache】JetCache的使用方法与步骤
9411 1
如何在Java中优雅地处理大文件?
如何在Java中优雅地处理大文件?