MapDB是一个开放源代码(Apache 2.0授权),嵌入式Java数据库引擎和收集框架。它提供带有范围查询、时效限制、压缩、超栈存储和流功能的map、set、list、queue、Bitmap。MapDB可能是当前最快的Java数据库,性能可与java.util 集合相当。它还提供高级功能,如ACID事务,快照,增量备份等等。
本手册是一项正在进行的工作,它将与MapDB 3.0版本一起完成。我们希望你会发现它很有用。如果您想为MapDB做出贡献,我们将非常乐意接受拉动请求
本手册中的代码示例在github仓库中
MapDB是灵活的,具有许多配置选项。但是在大多数情况下,它只配置了几行代码。
MapDB二进制文件托管在Maven Central存储库中。这里是MapDB的依赖部分。
org.mapdb
mapdb
VERSION
VERSION 是Maven Central 的最后一个版本号。3.0.4
每日版本都在快照库中。最新快照的版本号在这里。
sonatype-snapshots
https://oss.sonatype.org/content/repositories/snapshots
org.mapdb
mapdb
VERSION
您也可以直接从 Maven Central 下载MapDB jar文件。在这种情况下,请注意,MapDB依赖于Eclipse Collections,Guava,Kotlin库和其他一些库。以下是每个版本的依赖关系的完整列表。
以下是一个简单的例子。它打开内存中的HashMap,它使用堆栈存储,它不受垃圾收集的限制:
//import org.mapdb.*
DB db = DBMaker.memoryDB().make();
ConcurrentMap map = db.hashMap("map").createOrOpen();
map.put("something", "here");
HashMap(和其他集合)也可以存储在文件中。在这种情况下,可以在JVM重新启动之间保留内容。有必要调用DB.close()来保护文件免受数据损坏。其他选项是使用写入日志来启用事务。
DB db = DBMaker.fileDB("file.db").make();
ConcurrentMap map = db.hashMap("map").createOrOpen();
map.put("something", "here");
db.close();
Hello World示例没有覆盖提交。
默认情况下,MapDB使用泛型序列化,可以序列化任何数据类型。使用专门的串行器,速度更快,记忆效率更高。此外,我们还可以在64位操作系统上启用更快速的内存映射文件:
DB db = DBMaker.fileDB("file.db").fileMmapEnable().make();
ConcurrentMap map =
db.hashMap("map", Serializer.STRING, Serializer.LONG)
.createOrOpen();
map.put("something", 111L);
db.close();
MapDB可以像Lego一样插拔。有两个类就像不同部分的插接块一样,即DBMaker和DB类。
DBMaker类处理数据库配置、创建和打开。MapDB有几种模式和配置选项,都可以使用这个类设置。
一个数据库实例代表了一个打开的数据库(或单个事务会话)。它可用于创建和打开集合存储。它还可以使用commit(),rollback()和close()等方法来处理数据库的生命周期。
要打开(或创建)一个存储,可以使用许多*DB 静态方法,例如DBMaker.fileDB()。MapDB具有很多格式和模式,每个xxxDB()使用不同的模式:memoryDB()打开一个由byte [] 数组支持的内存数据库,
appendFileDB()打开一个使追加的日志文件等。
一个xxxDB()方法后可跟一个或多个配置项,最后一个应用所有选项的make()方法打开选定的存储并返回一个DB 对象。此示例打开启用加密的文件存储:
DB db = DBMaker.fileDB("/some/file")
//TODO encryption API
//.encryptionEnable("password")
.make();
一旦你创建了DB,你可以打开一个集合或其他记录。DB使用构建器样式配置。它可以选择集合类型(hashMap ,treeSet …)并命名,然后进行配置,最终可以直接进行操作。
下边的例子打开(或创建新的)TreeSet命名为“example”
NavigableSet treeSet = db.treeSet("example").createOrOpen();
还可以应用其他配置:
NavigableSet treeSet =
db.treeSet("treeSet").maxNodeSize(112).
createOrOpen();
构建器可以以三种不同的方法结束:
DB不限于集合, 还可以创建其他类型的记录,如原子记录:
Atomic.Var var = db.atomicVar("mainPerson",Person.SERIALIZER).createOrOpen();
DB具有处理事务生命周期的方法: commit() , rollback() and close() .
一个DB 对象表示单个事务。上面的例子每个存储使用单个全局事务,这对于一些应用是足够的:
ConcurrentNavigableMap 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();