第一篇:从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 对比


相关文章
|
存储 缓存 NoSQL
Leveldb学习笔记:leveldb的使用与原理探究
Leveldb学习笔记:leveldb的使用与原理探究
Leveldb学习笔记:leveldb的使用与原理探究
|
缓存 算法
07、Netty学习笔记—(聊天业务优化:参数调优)(二)
07、Netty学习笔记—(聊天业务优化:参数调优)(二)
07、Netty学习笔记—(聊天业务优化:参数调优)(二)
|
XML 缓存 NoSQL
玩转Spring Cache --- 整合进程缓存之王Caffeine Cache和Ehcache3.x【享学Spring】(下)
玩转Spring Cache --- 整合进程缓存之王Caffeine Cache和Ehcache3.x【享学Spring】(下)
|
编解码 Java 应用服务中间件
“超越极限 - 如何使用 Netty 高效处理大型数据?“ - 掌握 Netty 技巧,轻松应对海量数据处理!
本文介绍了Netty中大型数据写入与序列化技术的实现方法。在大型数据写入方面,通过FileRegion接口和零拷贝技术优化文件传输效率,避免内存耗尽风险。同时,ChunkedWriteHandler支持异步写入大型数据流,减少内存消耗。关于序列化,文章探讨了JDK标准序列化、JBoss Marshalling及Google Protocol Buffers三种方式,分别适用于不同场景需求。最后总结指出,Netty提供的编解码器和ChannelHandler组件经过实践验证,具备高度灵活性与稳定性,可广泛应用于各类系统开发中。
417 0
“超越极限 - 如何使用 Netty 高效处理大型数据?“ - 掌握 Netty 技巧,轻松应对海量数据处理!
|
敏捷开发
怎么理解基于架构的软件开发
理解基于架构的软件开发
423 1
|
XML Java 数据格式
Spring BeanFactory深度讲解
Spring `BeanFactory` 是 Spring 容器的基础,负责创建、配置和管理 Bean 实例,并提供对 Bean 生命周期的管理和控制。它通过读取配置文件或注解来实例化和管理 Bean,支持 XML、Java 配置和注解配置方式。与 `ApplicationContext` 相比,`BeanFactory` 更轻量级,采用延迟加载策略,适用于资源受限的环境。它实现了工厂模式,将对象的创建和管理分离,使应用程序更灵活、可扩展且易于维护。
210 0
|
设计模式 Java
Java中的动态加载与卸载类
Java中的动态加载与卸载类
|
消息中间件 存储 缓存
一文快速掌握高性能内存队列Disruptor
`Disruptor`是LMAX公司开源的高性能内存消息队列,单线程处理能力可达600w订单/秒。本文从使用和设计角度探讨这款Java消息队列。作者sharkChili是Java开发者,CSDN博客专家,Java Guide项目维护者。文章介绍了Disruptor的基础使用,包括前置步骤、消息模型、消息处理器配置、生产者实现,并展示了效果。同时,文章详细解析了Disruptor的工作流程和高效原因,如无锁操作、分支预测和缓存填充。最后,作者提供相关资源链接并邀请读者加入交流群。
2801 0
|
SQL 缓存 关系型数据库
数据库连接池到底应该设多大?
数据库连接池到底应该设多大?
582 0