MapDB 是一个开源(基于 Apache 2.0 许可证)的嵌入式 Java 数据库引擎和集合框架。它提供了映射(Maps)、集合(Sets)、列表(Lists)、队列(Queues)、位图(Bitmaps),并支持范围查询、过期机制、压缩、堆外存储和流处理。
MapDB 可能是速度最快的 Java 数据库,其性能可与 java.util 集合相媲美。
MapDB 还提供了诸如 ACID 事务、快照、增量备份等高级功能,以及更多其他特性。
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 主打轻量级、嵌入式、本地存储,不适合分布式、高并发的服务端集群场景,核心适用场景如下:
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 的知识,请继续学习后续教程🚀