私はdb4o 8.0を使用しています。db4odatabase ファイルのサイズは 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 つの User オブジェクトが含まれます。ただし、上記のコードを実行すると、db4odatabase は完全に空になります。なぜそのようなことが起こっているのですか?
削除されなかった他のオブジェクト (この場合は 1 ユーザー オブジェクト) が失われないようにするにはどうすればよいですか? db4o データベースで最適化を行う正しい方法は何ですか?