- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 MapDB在一个处理数十亿个需要映射/排队的对象的项目中。程序完成后我不需要任何类型的持久性(MapDB 数据库都是临时的)。我希望程序尽可能快地运行,但我对 MapDB 的 commit() 函数(我认为它与性能相关)感到困惑,即使在阅读了 docs 之后也是如此。 .我的问题:
commit 到底做了什么?我的工作理解是它将对象从堆序列化到磁盘,从而释放堆空间。这准确吗?
对刚刚提交的对象的引用会怎样?它们会被 GC 清理掉,还是会以某种方式“引用”磁盘上的对象(使用 MapDB 使其变得透明?)
最终,我想知道如何尽可能高效地使用 MapDB,但如果不知道 commit() 的用途,我就无法做到这一点。对于有效使用 MapDB 的任何其他建议,我将不胜感激。
最佳答案
commit
操作是对 transactions 的操作,就像您在数据库系统中发现的那样。 MapDB 实现事务,因此 commit
实际上是“使我对此数据库所做的更改永久化并对其其他用户可见”。补充操作是 rollback
,它会丢弃您在当前事务中所做的所有更改。提交不会(直接)影响内存中的内容和不影响内存中的内容。如果您正在尝试回收堆空间,您可能需要查看 compact()
。
对于您的第二个问题,如果您持有对某个对象的强引用,那么您将继续持有该强引用。 MapDB 不会为您删除它。大多数时候,您应该将 MapDB 视为普通的 Java Map。当您调用 get
时,MapDB 会向您隐藏它是在内存中还是在磁盘上,并且只向您返回对检索到的对象的可用引用。检索到的对象将在内存中徘徊,直到它变成垃圾,就像其他任何东西一样。
关于java - 高效使用 MapDB(对提交感到困惑),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18322066/
我正在探索将 MapDB 实用程序用作由 SSD 支持的堆外 Java 缓存。有人可以建议它是否支持以下内容: 设备对 SSD 设备的访问是否“闪存友好”,即访问是否对齐页面。 它是否允许以批处理模式
我正在研究堆外缓存,似乎找不到太多有关堆上内存消耗与堆外(仍在内存中)内存消耗的信息/基准。 我打算使用MapDB 。文档表明 compression can be applied在序列化对象和/或整
我在测试 mapdb 时遇到内存不足错误。鉴于该项目的整个想法是将数据结构序列化到磁盘并避免内存问题,我认为我做错了什么。有什么想法我做错了吗?还是有bug? @Test public
我在 Android Studio 中编程。我正在使用 mapDB,2.0-beta8 版本。我创建了自己的类 SingleCase,我还定义了一个静态变量: static ConcurrentNav
我正在使用我创建的文件支持的 MapDB: File dbFile = new File("db"); DBMaker.newFileDB(dbFile) .closeOnJvmShutdow
最新版本的 MapDB 是线程安全的吗?我在 Google 和 their website 找不到任何具体内容没有说任何关于锁定的事情。 最佳答案 你可以看到你需要的数据结构的代码注释,像HTreeM
什么时候应该通过 ORM 使用 MapDb 与常规数据库?除了直接映射到 Java.util.Map 之外,还可以使用 ORM 实现。 最佳答案 Jan 的回答有很大的偏见,因为他是 MapDb 的作
所以我有一个包含大约 2000 万个键值对的列表,我将数据以不同的方式存储在几个 MapDB 中,以查看它如何影响我的程序性能,并进行实验。 问题是,将 2000 万个键值对插入(以随机顺序)到 ma
我有一个用例,我想使用不透明的 byte[] 作为 MapDb 的键。我发现了这个 - Using a byte array as Map key - 快速限制;想知道推荐哪种方法。 我宁愿不创建一堆
所以我创建了一个像这样工作的数据库: static class Record implements Serializable { final String action; final
我正在使用 MapDB在一个处理数十亿个需要映射/排队的对象的项目中。程序完成后我不需要任何类型的持久性(MapDB 数据库都是临时的)。我希望程序尽可能快地运行,但我对 MapDB 的 commit
我将 MapDB 用于键值数据库以获得更好的性能。在 map.clear() 之后我的文件没有在磁盘中删除。我需要在 remove() 或 clear() 方法之后回收磁盘空间。下面是我的代码片段。
我在mapdb 中有包含150K 条目的树形图。调用 treemap.clear() 需要几分钟时间。我怎样才能快速做到这一点?使用 创建新的 db.treeMap("pageCache").crea
我正在使用 gwt,并且正在使用 mapdb,当我将数据检索为 map (BTreeMap) 时,gwt 会抛出 rpc 序列化异常。我将 map 包装在一个实现 Serialized 和 IsSer
我已经创建了一个 neo4j 用户定义过程。它还可以在 neo4j 中编译和工作。 虽然最近,我向我的过程插件添加了一个依赖项,以防止 neo4j 在我尝试运行新构建的 jar 时启动。具体来说,我在
我正在尝试序列化和反序列化一个对象以将其存储在 mapDb 中。 我设法使用这个片段序列化对象: ByteArrayOutputStream bos = new ByteArrayOutputStre
我已经实现了一个 hazelcast 服务,该服务通过 MapStoreFactory 和 newMapLoader 将其数据存储到本地 mapdb 实例中。如果需要重新启动集群,可以通过这种方式加载
我尝试直接将 Clojure 的 hashmap 与 MapDB 一起使用,但遇到了奇怪的行为。我检查了 Clojure 和 MapDB 源代码,但无法理解这个问题。 首先一切看起来都很好: lein
在 MapDB 1.x 中,您可以通过调用 db.delete("table name") 和 db.rename("old table name", "新表名”)。但是似乎不再有 API 功能可以执
我想直接从 HDFS 访问 mapdb map ,而不是将其复制到本地文件系统。是否可以?有没有其他方法可以在不使用本地文件系统的情况下读取这些 map ? 最佳答案 您可以将数据读入 byte[],
我是一名优秀的程序员,十分优秀!