企业项目管理、ORK、研发管理与敏捷开发工具平台

网站首页 > 精选文章 正文

MapDB

wudianyun 2024-12-23 10:12:28 精选文章 46 ℃

软件中有数据需要落盘的场景,下次重启后继续处理。

MapDB 是一个轻量级的本地缓存的框架,既可以使用堆外存储,也可以使用磁盘存储。其提供了大量的优化,能够直接替代原生的 Map、Set 等数据结构,提供不受 GC 影响,多级缓存,乃至于带有事务的 RDBMs 存储,提供了优秀的数据结构存储替代。是 jankotek 在 Github 上开源的嵌入式 Java 数据库引擎.

MapDB 提供了基于磁盘或者堆外存储的并发的 Maps、Sets、Lists、Queues 等实现,组合了嵌入式数据库引擎和 Java collections。

MapDB 能够被用于多种场景:

1.提供针对于 Maps, Lists, Queues 和其他 collections 的直接替代

2.提供不收 GC 垃圾回收影响的堆外数据结构存储

3.提供多层级的缓存,带有过期机制和溢出硬盘落地

4.提供 RDBMs 替代,带有事务、MVCC、增量备份等

5.提供本地数据处理和筛选,能够在有限的时间内处理巨量数据

代码示例:

1.内存db

DB db=DBMaker.memoryDB().make();

ConcurrentMap map = db.HashMap("map").createOrOpen(); map.put("something", "here");

2.文件db

DBdb=DBMaker.fileDB("file.db").make();

ConcurrentMap map= db.hashMap("map").createOrOpen(); map.put("something","here"); db.close();

3.内存映射文件

DB db = DBMaker .fileDB("file.db") .fileMmapEnable() .make(); ConcurrentMap<String,Long> map = db .hashMap("map", Serializer.STRING, Serializer.LONG) .createOrOpen(); map.put("something", 111L); db.close();

4.提交&回滚

ConcurrentNavigableMap<Integer,String> map = db.treeMap("collectionName", Serializer.INTEGER, Serializer.STRING)

.createOrOpen();

map.put(1,"one");

map.put(2,"two");

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

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();

HTreeMap:提供了 HashMap 和 HashSet 在 MapDB 中的实现,线程安全且支持过期机制

BTreeMap:提供了 TreeMap 和 TreeSet 在 MapDB 中的实现,基于无锁的并发 B-链树

SortedTableMap:把键值存储在固定大小的表中,并使用二分查找查询

经典数据结构

HTreeMap:提供了 HashMap 和 HashSet 在 MapDB 中的实现,线程安全且支持过期机制

BTreeMap:提供了 TreeMap 和 TreeSet 在 MapDB 中的实现,基于无锁的并发 B-链树

SortedTableMap:把键值存储在固定大小的表中,并使用二分查找查询

Tags:

最近发表
标签列表