删除领域数据库对象,但即使所有对象都为空,领域文件大小也保持不变。并且在时间上变得太大了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除领域数据库对象,但即使所有对象都为空,领域文件大小也保持不变。并且在时间上变得太大了相关的知识,希望对你有一定的参考价值。

我有一个我在我的应用程序中使用的领域数据库。文件大小为7mb。它内部有不同的对象。但后来我调用了这个函数:

 public static void deleteRealm(Context context) {
    Realm realm = PSApplicationClass.getInstance().getRealm();
    try {
        Log.i("", "realm start");
        realm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                realm.delete(Destination.class);
                realm.delete(TripStep.class);
                realm.delete(TripStop.class);
                realm.delete(Route.class);
                realm.delete(RealmLocation.class);
                realm.delete(CoordLocation.class);
                realm.delete(PSTrip.class);
                realm.delete(PSUser.class);
                realm.delete(UserVehicle.class);
                realm.delete(Vehicle.class);
                realm.delete(MileageRates.class);
                realm.delete(PSUserActivityMonth.class);
                realm.delete(PSUserActivityWeek.class);
                realm.delete(PSUserActivityYear.class);
                realm.delete(Activity.class);
                realm.delete(PSTripsStats.class);
                realm.delete(Report.class);
                realm.delete(Setting.class);
                realm.delete(AddressComponent.class);
                realm.delete(RealmString.class);
                realm.delete(RealmInt.class);
                realm.deleteAll();
            }
        });
        Log.i("", "realm end");
    } catch (Exception e) {
        Log.i("", "realm continue initTrip error trying to add to realm:" + e.getMessage());
        if (realm.isInTransaction()) {
            realm.cancelTransaction();
        }
    }
}

我再次检查。并且文件仍然是7 MB,但它是空的。里面没有领域对象。更重要的是,如果我再次获得相同的数据,它将增长到14MB,所以当我删除数据时,它将有14MB空,然后增长到21 ......依此类推。这导致它成为一个巨大的文件。而且我很确定这不应该发生。为什么领域这样做?这是我正在谈论的文件:https://www.dropbox.com/s/ri95yiwjutjiki6/myrealm.realm?dl=0

答案

Realm FAQ,这是可以预料的,数据库最终将重用该空间。

话虽这么说,你可以通过调用Realm#compactRealm(RealmConfiguration)强制数据库压缩。见documentation

以上是关于删除领域数据库对象,但即使所有对象都为空,领域文件大小也保持不变。并且在时间上变得太大了的主要内容,如果未能解决你的问题,请参考以下文章

领域:删除过时的对象

领域对象列表函数未定义,即使对象已定义且列表已填充

六 领域驱动设计-领域对象的生命周期

堆栈中的每个对象都为空

如何在 Swift 中使用 Mappable 协议映射自定义对象的领域列表

领域对象已被删除或失效