MapDB:专为 Java 设计的高性能的数据库

  • 郭蕾

2014 年 7 月 21 日

话题:DevOps语言 & 开发

MapDB 是一个快速、易用的嵌入式 Java 数据库引擎,它提供了基于磁盘或者堆外(off-heap 允许 Java 直接操作内存空间, 类似于 C 的 malloc 和 free)存储的并发的 Maps、Sets、Queues。MapDB 的前身是 JDBM,已经有 15 年的历史。MapDB 支持 ACID 事务、MVCC 隔离,它的 jar 包只有 200KB,且无其它依赖,非常轻量。MapDB 目前的版本是 1.0.5,相对来说功能已经稳定,并有全职的开发者支持开发。

MapDB 全部使用 Java 编写,支持 100GB 以上的数据存储,且性能可以与很多由 C 语言开发的数据库(谷歌的 Leveldb、甲骨文的 Berkeley DB)相媲美。它的主要特性如下:

  • 并发。MapDB 包含记录级别的锁和先进的并发控制引擎,它的性能可以在多核之间线性扩展,支持并发写。
  • 快速。MapDB 的性能可以与原生数据库相媲美,它经过多次的优化以及重写。
  • ACID 事务。支持 ACID 事务并实现了不同形式的 MVCC,MapDB 使用 write-ahead-log 或者 append-only 的方式来存储操作日志。
  • 灵活。MapDB 可以运行在内存缓存中,也可以支持 TB 级别的的数据库。它支持各种配置以满足不同的需求。
  • Hackable。很多特性(实例缓存 cache、异步写、压缩) 都是一组类, 易于加入新功能和组件。
  • SQL Like。MapDB 有非常快的 SQL 引擎,包含很多从关系型数据库移植过来的特性,比如辅助索引 / 集合、自增序列 ID、 连接、触发器、组合键。
  • 低磁盘使用率。MapDB 的能缩小磁盘的使用量,并且压缩以及序列化过程都非常快速。

MapDB 采用模块化的架构设计,非常容易扩展,每一个模块都可以被关掉,并且每个模块都可以有不同的设计,比如 MapDB 中有 5 种不同的缓存以及 3 种不同的存储模式。

CodeFutures 的 CEO Cory解释了 MapDB 所要解决的问题,“MapDB 为 Java 程序员提供了一种自然的方式来快速存储大对象,它可以精确匹配应用的需求。大部分应用都遇到过内存溢出或者很多的对象被装载到 JVM 而引起的过度垃圾回收的问题,很多时候这些问题是由于应用中有很多大的集合对象造成的。现在你可以使用 MapDB 来处理这些大的集合,且连 API 都不需要改。另外,MapDB 可以轻松的实现排序、遍历、事务。”

另外,结合 SSD 硬盘,MapDB 可以用于某些单节点的大数据场景。当数据集没有大到使用 Hadoop 处理时,可以考虑使用使用 MapDB 来编写基于内存的处理程序。

读者可以阅读官方指南来学习 MapDB,也可以关注作者的博客来了解关于 MapDB 的更多信息。

DevOps语言 & 开发