MapDB:以磁盘或堆内存中并发集合为基础的嵌入式数据库引擎

netty自定义协议组包的时候用到的这个,感觉挺好用的。

MapDB提供了并发的Maps,Sets 和 Queues,基于磁盘存储或off-heap-memory。这是一个快速,可扩展的和易于使用的嵌入式Java数据库引擎。非常微小(jar只有160KB),但功能强大,如事务,空间高效的序列化,实例缓存和透明压缩/加密。

功能特性

  • 并发 – MapDB有一个在数据库记录元组水平的锁和一个很先进的并发控制引擎,它的性能呈线性扩展,数据库可以多线程水平写入。
  • 快速 – MapDB有很好的性能,足以与原生的DB媲美,这得益于它的优化和重写。
  • ACID事务 – 支持ACID事务和完全的MVCC隔离,MapDB使用写前日志。
  • 灵活 – MapDB可以运行在内存缓存中,也可以支持TB级别的的数据库。它有很多选项用来让你可以选择牺牲持久性从而换来快速写的性能。拥有各种配置从而满足你的需求。
  • Hackable – MapDB 都是模块组件化的,像一些特性(实例缓存,同步写,压缩)只是一些类的封装,你可以很容易的引入你的新的功能和组件。
  • SQL Like – MapDB 有时可以代替SQL引擎,它有很多使你可以很容易地从关系数据库移植过来的特性,像辅助索引,自增序列ID, joints, triggers, composite keys…
  • 低磁盘空间使用情况

示例代码:

Java


import  org.mapdb.*;

// configure and open database using builder pattern.

// all options are available with code auto-completion.

DB db  =  DBMaker.newFileDB(new  File("testdb"))

 .closeOnJvmShutdown()

 .encryptionEnable("password")

 .make();

// open existing an collection (or create new)

ConcurrentNavigableMap  map  =  db.getTreeMap("collectionName");

map.put(1,  "one");

map.put(2,  "two");

// map.keySet() is now [1,2]

db.commit();  //persist changes into disk

map.put(3,  "three");

// map.keySet() is now [1,2,3]

db.rollback();  //revert recent changes

// map.keySet() is now [1,2]

db.close();

官方网站:http://www.mapdb.org/
开源地址:https://www.github.com/jankotek/mapdb/

你可能感兴趣的:(MapDB:以磁盘或堆内存中并发集合为基础的嵌入式数据库引擎)