MapDB中文文档
介绍
MapDB是一个基于(Apache 2.0 licensed)开源的Java嵌入式数据库引擎和集合框架。他支持针对Map,Set,Queues,Bitmaps 的范围查询,数据过期,压缩,堆外存储和流的操作。MapDB可能是Java最快的数据库,性能就像操作java中的集合一样。他也支持一些高级功能如:ACID事务,快照和增量备份等。
本手册正在进行中,将与MapDB3.0版本一起完成。我希望你会发现它有用。如果你想为mapDB做贡献,我们很乐意接收。本手册中的示例代码都在github上。
快速开始
快速介绍
mapdb很灵活,有很多配置选项。但在大多数情况下,它只配置了几行代码。
获得
MapDB的maven仓库
<dependency>
<groupId>org.mapdb</groupId>
<artifactId>mapdb</artifactId>
<version>VERSION</version>
</dependency>
你可以从这里获得最新的版本 https://mvnrepository.com/artifact/org.mapdb/mapdb
maven 3.0.7 日常的快照版本地址在这里
<repositories>
<repository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.mapdb</groupId>
<artifactId>mapdb</artifactId>
<version>VERSION</version>
</dependency>
</dependencies>
你也可以直接下载mapDB的 jar文件
mapdb也可以依赖于eclipse、Guava、kotlin库和其他一些库。这里有它所有的版本。
Hello World
以下是一个简单的示例。在内存中打开一个HashMap ,可以使用堆外存储,不受垃圾收集的限制。
//import org.mapdb.*
DB db = DBMaker.memoryDB().make();
ConcurrentMap map = db.hashMap("map").createOrOpen();
map.put("something", "here");
HashMap或者是其他的集合也可以存在在文件中。在这种情况下,可以再java重启时保存数据。这里必须使用DB.close()
来保护文件数据不被损坏。另一种方式是启用带有写日志的事务。
DB db = DBMaker.fileDB("file.db").make();
ConcurrentMap map = db.hashMap("map").createOrOpen();
map.put("something", "here");
db.close();
MapDB 默认是使用使用可序列化任何数据类型的泛型序列化。比使用专门的序列化程序要快,更节省内存。我们还可以在64位操作系统上启用更快的内存映射文件。
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();
快速提示
- 在64位系统上,使用内存文件映射速度更快,性能更好。
- mapdb有用于快速批量导入集合的pump。它比
map.put()
快得多. - 事务的开启会影响性能,但是没有他可能会存在文件数据损坏的情况。
- 存储在mapdb中的数据(键和值)应该是不可变的,mapdb的对象序列化是在后台完成的
DB
DB 和 DBMaker
mapdb就像乐高一样,可以插拔。这里有两个类 DB和DBMaker来充当这样的角色。
DBMaker这个类来处理数据的配置,创建和开启。mapdb有多重模式和配置,大多都可以通过dbMaker来实现。
一个DB 实例表示一个打开的数据库(或者一个单一的事务会话)。它也可以用来创建或打开集合存储。也能够使用一些方法如: commit(),rollback(), close()
来处理数据库的生命周期 。
可以使用很多如DBMaker.fileDB()
类似这样的*DB
的静态方法来打开或创建一个存储。MapDB有很多格式和模式。每一个xxxDB()
使用的不同的模式,比如说:memoryDB()
在内存中使用的byte[]数组。appendFileDB()
使用的是append日志文件,等等。
一个xxxDB()
方法后跟一个或多个配置选项,最后是一个make()方法,该方法应用所有选项,打开选定的存储并返回一个db对象。
DB db = DBMaker
.fileDB("/some/file")
//TODO encryption API
//.encryptionEnable("password")
.make();
打开和创建一个集合
一旦你有数据库,你可以打开一个集合或其他记录。数据库使用生成器样式配置。它从集合类型(hashmap,treeset…)和名称开始,然后应用配置,最后是操作指示器。
此示例打开(或创建)名为“example”的TreeSet
NavigableSet treeSet = db.treeSet("example").createOrOpen();
你也可以使用其他的配置方式
NavigableSet<String> treeSet = db
.treeSet("treeSet")
.maxNodeSize(112)
.serializer(Serializer.STRING)
.createOrOpen();
这里有三种不同的创建方法:
create()
创建