java读取mapdb_MapDB 教程一
发布日期:2021-06-24 14:00:21 浏览次数:2 分类:技术文章

本文共 3052 字,大约阅读时间需要 10 分钟。

简介

MapDB是一个开放源代码(Apache 2.0授权),嵌入式Java数据库引擎和收集框架。它提供带有范围查询、时效限制、压缩、超栈存储和流功能的map、set、list、queue、Bitmap。MapDB可能是当前最快的Java数据库,性能可与java.util 集合相当。它还提供高级功能,如ACID事务,快照,增量备份等等。

本手册是一项正在进行的工作,它将与MapDB 3.0版本一起完成。我们希望你会发现它很有用。如果您想为MapDB做出贡献,我们将非常乐意接受拉动请求

本手册中的代码示例在github仓库中

快速简介

MapDB是灵活的,具有许多配置选项。但是在大多数情况下,它只配置了几行代码。

获取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库和其他一些库。以下是每个版本的依赖关系的完整列表。

Hello World!

以下是一个简单的例子。它打开内存中的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();

快速提示

内存映射文件要快得多,应该在64位系统上启用,以获得更好的性能。

MapDB具有快速批量导入集合的机制。它比Map.put()快得多。事务具有性能开销,但没有它们,如果没有正确关闭,则存储将被损坏。

存储在MapDB中的数据(键和值)应该是不可变的。MapDB在后台序列化对象。

MapDB有时需要压缩。运行DB.compact()或查看背景压缩选项。

DB和DBMaker‌

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

构建器可以以三种不同的方法结束:

create() 创建新的集合。 如果集合存在,将扔出异常。

open() 打开存在的集合。 如果集合不存在,将扔出异常。

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

转载地址:https://blog.csdn.net/weixin_33303537/article/details/114844526 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:用java绘制像素图像_用Java在灰度图像中写入像素数据
下一篇:java对焦_Java Camera.cancelAutoFocus方法代码示例

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月28日 14时49分01秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

【蓝桥杯真题11】Scratch季节变化 少儿编程scratch蓝桥杯选拔赛真题讲解 2019-04-28
Scratch画雪花 电子学会图形化编程Scratch等级考试四级真题 2020-12 2019-04-28
初学python100例-案例29 判断回文数 少儿编程案例讲解 2019-04-28
【蓝桥杯真题10】Scratch投球 少儿编程scratch蓝桥杯选拔赛真题讲解 2019-04-28
Scratch绘图优化程序 电子学会图形化编程Scratch等级考试四级真题和答案 2020-12 2019-04-28
Scratch河马带球小游戏 蓝桥杯Scratch国赛真题答案和解析 2019-04-28
Scratch画圆 蓝桥杯Scratch国赛真题答案和解析 2019-04-28
Scratch画圆形螺旋 蓝桥杯Scratch国赛真题答案和解析 2019-04-28
初学python100例-案例30 计算闰年 少儿编程案例讲解 2019-04-28
Scratch螺旋多边形小游戏 蓝桥杯Scratch国赛真题答案和解析 2019-04-28
初学python100例-案例31 输入星期几的第一个字母判断是星期几 少儿编程案例讲解 2019-04-28
初学python100例-案例32 男孩女孩小孩人数 少儿编程案例讲解 2019-04-28
【蓝桥杯真题12】Scratch角色装扮 少儿编程scratch蓝桥杯选拔赛真题讲解 2019-04-28
毕业设计 C#开发实现影院信息管理商城系统 毕业论文【论文+源程序+数据库】 2019-04-28
电子学会图形化scratch编程等级考试二级真题答案解析(判断)2020-9 2019-04-28
scratch别碰红块小游戏 电子学会图形化编程scratch等级考试二级真题和答案解析2020-9 2019-04-28
scratch打棒球游戏 电子学会图形化编程scratch等级考试四级真题和答案解析2019 2019-04-28
scratch列表移位 电子学会图形化编程scratch等级考试四级真题和答案解析2019 2019-04-28
scratch动物拥抱游戏 电子学会图形化编程scratch等级考试一级真题答案2020-9 2019-04-28
spring aop之对象内部方法间的嵌套失效 2019-04-28