MapDB 教程

MapDB 简介

MapDB 是一个开源(基于 Apache 2.0 许可证)的嵌入式 Java 数据库引擎和集合框架。它提供了映射(Maps)、集合(Sets)、列表(Lists)、队列(Queues)、位图(Bitmaps),并支持范围查询、过期机制、压缩、堆外存储和流处理。

MapDB 可能是速度最快的 Java 数据库,其性能可与 java.util 集合相媲美。

MapDB 还提供了诸如 ACID 事务、快照、增量备份等高级功能,以及更多其他特性。

MapDB 特性

1、双存储模式

  • 内存模式:数据仅存于 JVM 内存,程序退出后丢失,适合临时缓存、会话存储等无需持久化的场景,性能和原生集合一致;

  • 文件持久化模式:数据落地到本地磁盘文件,支持事务、数据刷盘,适合小型应用本地存储、嵌入式设备数据持久化等轻量级持久化场景。

2、完善的序列化支持

内置多种高效序列化器(Serializer.STRING、Serializer.LONG、Serializer.INTEGER 等),也支持自定义序列化器,可直接存储 Java 自定义对象,无需手动做对象与字节的转换。

3、并发安全与事务支持

  • 核心数据结构(如 HTreeMap)天生线程安全,支持高并发的读写操作,适配多线程场景;

  • 持久化模式下可开启事务,支持事务提交(commit)、回滚(rollback),保证数据操作的原子性。

4、丰富的核心数据结构

除了核心的哈希表(HTreeMap),还支持有序树表(TreeMap)、集合(Set)、队列(Queue)、计数器(AtomicLong)等,覆盖大部分本地存储的需求。

5、轻量级 & 无依赖

核心包体积小,无第三方强依赖,可直接引入 Maven/Gradle 依赖使用,适配各种 Java 项目(桌面应用、嵌入式应用、后端服务、Android 等)。

MapDB 适用场景

MapDB 主打轻量级、嵌入式、本地存储,不适合分布式、高并发的服务端集群场景,核心适用场景如下:

  • Java 应用本地缓存:替代 Guava Cache、Caffeine,支持缓存持久化(重启应用后缓存不丢失);

  • 嵌入式设备数据存储:物联网(IoT)、嵌入式设备的本地数据落地,无需部署数据库服务;

  • 小型桌面应用持久化:桌面 Java 程序的本地数据存储(如配置、用户数据),替代 SQLite 的轻量场景;

  • 临时数据高并发存储:服务端临时数据、会话数据的内存存储,利用其并发安全特性;

  • 大数据量本地集合:当数据量超过 JVM 内存限制时,可将部分数据落地磁盘,MapDB 自动做内存与磁盘的映射,避免 OOM。

与常见同类技术的区别

1、与 Java 原生集合(HashMap/TreeMap)

原生集合仅支持内存存储,数据量过大易 OOM,程序退出后数据丢失;

MapDB 支持磁盘持久化、内存 - 磁盘映射,可存储远超 JVM 内存的数据,且支持事务、并发安全。

2、与 SQLite(嵌入式关系型数据库)

SQLite 是关系型数据库,需写 SQL 语句,适合结构化、多表关联的场景;

MapDB 是键值对数据库,无 SQL,API 与集合一致,学习成本低,适合键值对、单表结构化的轻量场景,性能更高。

3、与 Redis(内存数据库)

Redis 是独立服务进程,需网络通信,支持分布式、集群,适合服务端高并发缓存 / 存储;

MapDB 是嵌入式无进程,本地调用无网络开销,无分布式能力,适合单应用的本地存储 / 缓存。

4、与 Guava Cache/Caffeine(Java 本地缓存)

这类缓存仅支持内存存储,部分支持过期策略,但无持久化能力,重启后缓存清空;

MapDB 支持缓存持久化,且可存储更大数据量(磁盘兜底),同时支持并发和事务。

更多关于 MapDB 的知识,请继续学习后续教程🚀

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号