我正在使用 db4o 8.0。db4o 数据库文件大小为 21MB。数据库中有以下对象。
User : There is 1 user in db.
PostedMessage : There are 10000 postedMessages in db.
我删除了所有 10000 条 PostedMessage。然后我尝试对 db4o 数据库进行碎片整理。以下代码用于碎片整理。
private void processDefrag() {
try {
String dbpath = "D:\\db4oDatabase";
IdMapping mapping = new InMemoryIdMapping();
//new DatabaseIdMapping(dbpath); //use this if heap overflows
DefragmentConfig config = new DefragmentConfig(dbpath, dbpath+".bak", mapping);
config.storedClassFilter(new AvailableClassFilter());
config.forceBackupDelete(false);
config.objectCommitFrequency(1000);
Defragment.defrag(config);
System.out.println("Defrag completed");
} catch (IOException ex) {
ex.printStackTrace();
}
}
我的期望是 db4oDatabase 文件大小将回到 21 Kb。并且 db4oDatabase 仍将包含 1 个用户对象。然而,运行上述代码后,db4odatabase 完全为空。为什么会这样?
如何避免丢失未删除的其他对象(在本例中为 1 个用户对象)?在 db4o 数据库上进行碎片整理的正确方法是什么?