【问题标题】:Deleting realm DB objects, but even if all objects are empty, the realm file size remains the same. and in time becomes way too big删除领域数据库对象,但即使所有对象为空,领域文件大小仍保持不变。并且随着时间变得太大
【发布时间】:2017-12-18 16:25:29
【问题描述】:

我有一个在我的应用程序中使用的领域数据库。 文件大小为 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

【问题讨论】:

标签: android database realm storage realm-mobile-platform


【解决方案1】:

来自Realm FAQ,这是意料之中的,数据库最终会重用空间。

话虽如此,您可以通过调用Realm#compactRealm(RealmConfiguration) 来强制执行数据库压缩。见documentation

【讨论】:

  • 好的。但是,我仍然有一个用户使用这个应用程序超过一年,并注意到我们的应用程序正在使用 6GB 的数据,原因是这个。这是很多。
  • 我可以建议在删除所有条目后添加Realm#compactRealm(RealmConfiguration)。我不知道这个特定的用户,但这看起来像一个错误。另一种(或附加)选项是在设备连接到充电器时(通常在夜间)安排数据库的压缩,使用JobScheduler(如果您需要5.0之前的兼容性github.com/firebase/firebase-jobdispatcher-android,则使用Firebase JobDispatcher) .
  • 我现在正在使用紧凑的 Realm,必须修改我的代码,因为我有一些 Realm 实例,我们是从另一个线程打开的,并且没有正确关闭,但现在可以了。赞成并接受您的回答
  • 很高兴它有帮助。谢谢!
  • @rosualin 我认为您应该发布对您有用的内容以帮助他人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
相关资源
最近更新 更多