标签: mapdb

有效地使用MapDB(对提交感到困惑)

我在一个处理数十亿需要映射/排队的对象的项目中使用MapDB.程序完成后我不需要任何持久性(MapDB数据库都是临时的).我希望程序尽可能快地运行,但我对MapDB的commit()函数(我认为与性能相关)感到困惑,即使在阅读了文档之后.我的问题:

  1. 提交究竟做了什么?我的工作理解是它将对象从堆序列化到磁盘,从而释放堆空间.这准确吗?

  2. 对刚刚提交的对象的引用会发生什么?他们是通过GC清理它们还是以某种方式'引用'磁盘上的对象(使用MapDB使其透明?)

最终我想知道如何尽可能高效地使用MapDB,但如果不知道commit()是什么,我就不能这样做.我非常感谢您有效使用MapDB的任何其他建议.

java mapdb

10
推荐指数
1
解决办法
2306
查看次数

MapDB中域对象的序列化

例如,在我的mapdb应用程序中,我有一个简单的域对象Course:

import java.io.Serializable;

class Course implements Serializable {
  private static final long serialVersionUID = 1L;
  String cID;
  String name;
  String teacherName;
  String departmentName;
  public Course(String name) {
    this.name = name;
    System.out.println("Update: added course \"" + name);
  }
}
Run Code Online (Sandbox Code Playgroud)

通过反复试验,我添加了工具Serializable,serialVersionID和我自己的域密钥cID。一切似乎正常。但是这是将其存储到MapDB中的代码:

NavigableMap<String, Course> courses;
courses = db.treeMap("courses", Serializer.STRING, Serializer.JAVA).createOrOpen();
Run Code Online (Sandbox Code Playgroud)

给出警告:

Type safety: The expression of type BTreeMap needs unchecked
conversion to conform to NavigableMap<String,Course>
Run Code Online (Sandbox Code Playgroud)

我不了解该错误,但我相信这与我序列化为Serializer.JAVA有关。发生了什么,或者我做错了什么?

java mapdb

7
推荐指数
1
解决办法
1388
查看次数

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

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

public class HCMapStore<V> implements MapStore<String, V> {

Map<String, V> map;

/** specify the mapdb e.g. via 
  * DBMaker.newFileDB(new File("mapdb")).closeOnJvmShutdown().make() 
  */
public HCMapStore(DB db) {
    this.db = db;
    this.map = db.createHashMap("someMapName").<String, Object>makeOrGet();
}

// some other store methods are omitted
@Override
public void delete(String k) {
    logger.info("delete, " + k);
    map.remove(k);
    db.commit();
}

// MapLoader methods
@Override
public V load(String key) {
    logger.info("load, " + key);
    return map.get(key);
}

@Override
public Set<String> loadAllKeys() {
    logger.info("loadAllKeys");
    return map.keySet();
}

@Override
public …
Run Code Online (Sandbox Code Playgroud)

java nosql hazelcast mapdb

5
推荐指数
1
解决办法
3476
查看次数

MapDB ClassNotFoundException:kotlin.jvm.internal.Intrinsics

我试图运行一个简单的mapdb示例,但得到错误:

    Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
    at org.mapdb.DBMaker.fileDB(DBMaker.kt)
    at leechies.Truc.main(Truc.java:9)
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 2 more
Run Code Online (Sandbox Code Playgroud)

我的课:

package leechies;
import java.util.concurrent.ConcurrentMap;

import org.mapdb.DB;
import org.mapdb.DBMaker;

public class Truc {
    public static void main(String[] args) {
        DB db = DBMaker.fileDB("file.db").make();
        ConcurrentMap map = db.hashMap("map").createOrOpen();
        map.put("something", "here");
        db.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的pomx.xml

<dependencies>
    <dependency>
        <groupId>org.mapdb</groupId>
        <artifactId>mapdb</artifactId>
        <version>3.0.3</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

我运行rigth click - > Run as ... - > java application.

java noclassdeffounderror maven kotlin mapdb

5
推荐指数
1
解决办法
7875
查看次数

如何在MapDB中使用字节数组作为键

我有一个用例,我想使用opaque byte []作为MapDb的键.我发现了这一点 - 使用字节数组作为Map键 - 快速限制; 并想知道推荐哪种方法.

我宁愿不创建一堆临时对象和序列化开销,但似乎ByteBuffer.wrap(my_bytes)是Java指向我的地方.

我希望MapDB的核心开发者之一可以权衡这个或者ByteBufferJVM大师.

java mapdb

2
推荐指数
1
解决办法
1219
查看次数

mapdb如何持久交叉重启

我使用mapdb如下

val mycache = DBMaker.newFileDB(new File(("/data/tmp/cache.db")))
    .transactionDisable()
    .make().getHashSet("")
Run Code Online (Sandbox Code Playgroud)

然后当我这样做

mycache.put(k1, v1)
assertTrue(mycache.get(k1), v1) // all is fine
Run Code Online (Sandbox Code Playgroud)

但是,如果我重新启动我的服务器,我确实看到我在磁盘上有cache.db但是在阅读时会有一个空地图

所以

mycache.get(k1) // is null after restart
Run Code Online (Sandbox Code Playgroud)

如何从文件重启后重新读取我的地图?

database scala mapdb

2
推荐指数
1
解决办法
1183
查看次数

标签 统计

mapdb ×6

java ×5

database ×1

hazelcast ×1

kotlin ×1

maven ×1

noclassdeffounderror ×1

nosql ×1

scala ×1