2

我将 MapDB 用于键值数据库以获得更好的性能。在 map.clear() 之后,我的文件没有在磁盘中删除。我需要在 remove() 或 clear() 方法之后回收磁盘空间。下面是我的代码片段。

    public static void mapDBPerformanceonFileDBStack() throws Exception{
    String fileName ="testdatabase.db";
    DB db = DBMaker
            .fileDB(fileName)
            .closeOnJvmShutdown()
            .make();
    Map myMap = db.hashMap("testmap").keySerializer(Serializer.INTEGER).valueSerializer(Serializer.STRING).createOrOpen();
    System.out.println("Intial mapsize :" +myMap.size());
    for(int i=0;i<100000;i++){
        myMap.put(i,"key added" );
    }
    db.commit();
    System.out.println("mapsize after the addition :"+myMap.size());
    myMap.clear();
    System.out.println("mapsize after clear :"+myMap.size());
    db.commit();
    db.close();
}

map.clear() 后我的测试数据库文件大小未回收 - clear() 后大小相同。

4

1 回答 1

0
        ...
        Store[] stores = (HtreeMap)myMap.getStores();
        for (Store store : stores) {
            store.compact();
        }
        ...
        db.commit();
        db.close();
于 2020-08-21T03:13:57.490 回答