问题标签 [mapdb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3142 浏览

java - 如何从 mapDB 数据库中检索数据,而不是每次都覆盖它?

我正在开发一个与Doodle.com非常相似的 GWT Web 应用程序

我需要在数据库中存储一些有关事件和用户的信息。这是一个大学考试项目,我们必须使用 mapDB 来存储持久数据。我们遇到的问题是,每次saveEventsToDB()调用该方法时,都会有一个新数据库覆盖之前创建的数据库。

这是saveEventsToDB()方法:

我很确定这是由这行代码引起的:

但这是我们教授为我们提供的 mapDB 示例代码。

mapDB 文档说newFileDB

创建或打开存储在文件中的数据库。

但是每次都会创建一个新数据库,我们看到这个使用一些断点并尝试从数据库中提取数据,每次只返回一条记录。

如果有人可以提供帮助,将不胜感激。谢谢

0 投票
1 回答
178 浏览

java - MapDB 闪存友好性

我正在探索将 MapDB 实用程序用作由 SSD 支持的堆外 Java 缓存。有人可以建议它是否支持以下内容:

  1. 设备对 SSD 设备的访问是否“对闪存友好”,即访问是页面对齐的。
  2. 它是否允许以批处理模式将密钥插入设备。(我想知道是否可以避免在插入每个键后执行 db.commit() )。

谢谢!

0 投票
1 回答
1054 浏览

java - 在 MapDB 中创建地图时出错:ClassCastException:[J 无法转换为 [B

我正在使用 MapDB,并尝试使用长数组作为键创建直接内存映射,但出现以下错误:

我的代码是:

知道我做错了什么吗?

0 投票
1 回答
1497 浏览

java - 我是否以最好的方式使用 MapDB?

我有一个关于 MapDB 的问题。

下面的代码摘录来自用于管理体素数据的更大系统的一部分,细节并不重要。

我创建的地图的使用频繁且范围很大,因为这些地图通常存储数百万条记录,并被多个不同的线程引用。

在对代码进行分析后,我发现它的执行速度比我自己推出的堆外缓存代码慢得多,并且会导致大量的 GC 活动。GC 活动似乎以分配和垃圾收集数百万个 long[] 实例为中心,相当频繁。

我的问题是,从 MapDB 的作者或那些有经验的人那里,以下代码是 MapDB 的正确(最佳实践)使用模型,我正在尝试做什么?

需要注意的是,尽管所有这些映射都具有相同的键/值设置,并且我可以只使用一个大映射,但由于我的并发处理管道,我选择了分解数据。

提前致谢!

* 更新,2014 年 8 月 15 日 *

我刚刚尝试了以下方法,但它仍然很慢:

0 投票
3 回答
210 浏览

java - 从大文件创建地图

我有一个非常大的文件(10^8 行),其中事件计数如下,

我需要累积每个事件的计数,以便我的地图包含

我目前的做法:

读取行数,维护一张地图,并更新地图中的计数如下

目前这是代码中最慢的部分(大约需要 25 毫秒)。请注意,地图基于 MapDB,但我怀疑更新速度会因此而变慢(是吗?)

这是地图的 mapdb 配置,

有没有办法加快这个速度?

编辑

唯一键的数量与维基百科中的页面顺序相同。数据实际上是来自这里的页面流量数据。

0 投票
1 回答
977 浏览

java - 如何对项目进行排序以更快地插入 MapDB BTree?

所以我有一个大约 2000 万个键值对的列表,我将数据存储在几个不同的 MapDB 中,以查看它如何影响我的程序性能,并且为了实验。

问题是,将 2000 万个键值对(以随机顺序)插入到 mapdb 中需要相当多的时间。所以,我想对我拥有的键值对列表进行排序,以便我可以更快地插入它们,从而更快地利用它们构建数据库。

那么,我该怎么做呢?

我想了解如何为 MapDB 的 BTreeSet 和 BTreeMap 或使用单个键值对的 MapDB 和对单个键具有多个值的 MapDB 执行此操作。

编辑:我忘了提,键值对是字符串对象。

0 投票
4 回答
3775 浏览

java - Hazelcast 和 MapDB - 实现一个简单的分布式数据库

我已经实现了一个 hazelcast 服务,它通过 MapStoreFactory 和 newMapLoader 将其数据存储到本地 mapdb 实例中。如果需要重新启动集群,则可以通过这种方式加载密钥:

我现在面临的问题是来自 hazelcast 的 MapLoader 接口的 loadAllKeys 方法需要返回整个集群的所有键,但每个节点只存储它拥有的对象。

示例:我有两个节点并存储了 8 个对象,那么例如 5 个对象存储在 node1 的 mapdb 中,3 个对象存储在 node2 的 mapdb 中。我认为哪个对象由哪个节点拥有由 hazelcast 决定。现在重新启动时,node1 将为 loadAllKeys 返回 5 个键,node2 将返回 3 个。Hazelcast 决定忽略这 3 个项目,数据“丢失”。

有什么好的解决办法呢?

赏金更新在这里,我在 hc 邮件列表中提出了这个问题,提到了 2 个选项(我会再添加 1 个),我想知道 hazelcast 3.2 或 3.3 是否已经可以实现这样的事情:

  1. 目前 MapStore 接口仅从本地节点获取数据或更新。是否可以将整个集群的每个存储操作都通知 MapStore 接口?或者也许这已经可以通过一些听众魔法来实现?也许我可以强制 hazelcast 将所有对象放入一个分区并在每个节点上拥有 1 个副本。

  2. 如果我重新启动例如 2 个节点,则 MapStore 接口会被我的本地数据库正确调用,用于 node1,然后用于 node2。但是当两个节点都加入时,node2 的数据将被删除,因为 Hazelcast 假设只有主节点是正确的。我可以教 hazelcast 接受来自两个节点的数据吗?

0 投票
2 回答
1540 浏览

database - MapDB 与常规数据库

什么时候应该通过 ORM 使用 MapDb 与常规数据库?除了直接映射到 Java.util.Map 之外,它也可以使用 ORM 来实现。

0 投票
1 回答
786 浏览

mapdb - MapDB 文件类型

我有一个问题mapDB version 1.0.6。当我创建一个数据库时,我最终得到了两个具有相同名称但具有不同文件类型的文件。

一个是例如IRTree文件类型FILE,另一个是IRTree文件类型.p
话虽如此,每当我尝试读取提供文件名 IRTree 的数据库时,我都会遇到异常:

NullPointerException with the command DBMaker.newFileDB(new File(filename)).readOnly().make(); or an IOException: storage header is invalid.

谁能向我解释发生了什么事?

0 投票
1 回答
925 浏览

caching - mapdb中的hashmap vs treemap:如何比较它们?

最近我开始玩 MapDB,并了解它有趣的属性。据我现在了解,它具有三种主要的数据类型:BTree、Hashmap 和 Hashset。对我来说有点模糊的是,什么时候使用 Hahsmap(和 Hashset)比使用 Btree 更好?与其他数据结构相比,使用每种数据结构有什么优缺点?