copyToRealmOrUpdate和Delete

时间:2015-08-25 18:30:56

标签: android performance realm

我需要在应用程序中同步数据。我向服务器发出请求,绑定并使用copyToRealmOrUpdate(Iterable<E> objects)将此数据添加或更新到数据库。

但我的文件可能无效,我需要删除在请求时返回的数据中没有的所有内容。我不想截断或执行手动删除来执行此操作,因为性能很重要。

IDEA 1

@beeender

您如何使用表格的PRIMARY_KEY删除我不想要的数据(或者我不需要)?

看起来像:

  • 1º:如果填充了数据库,请获取所有主键并将其添加到HashMap(或任何执行相同操作的任何内容)。

  • 2º:如果已更新或添加,则更新数据或添加,删除HashMap项目(使用主键)。

  • 3º:删除领域中HashMap的所有项目。

1 个答案:

答案 0 :(得分:2)

在这种情况下,也许In memory Realm对你来说是个不错的选择。您可以找到相关文档here

使用内存中的Realm:

  • 启动新的应用程序流程时,数据库将为空
  • 关闭Realm的所有实例后,数据也将被清除。

----------------------------------- 删除正常案例数据的更新 -----------------------------------------

要删除,您可以使用一些选项

  1. 删除特定型号的所有数据,请参阅doc realm.allObjects(MyModel.class).clear();
  2. 通过(Realm API)[https://realm.io/docs/java/latest/api/io/realm/Realm.html#deleteRealm(io.realm.RealmConfiguration)]删除给定领域的整个数据(首先关闭所有实例!): Realm.deleteRealm(realmConfig);
  3. 或者只是通过普通的java API删除Realm文件。
  4. 如果您真的关心性能,可以考虑在一个Realm中分离这些数据,并使用选项2或3将其删除。有关通过RealmConfiguration使用不同的Realm,请参阅文档here

    ----------------------------------- 按日期字段删除的更新 ------------------------------------------------- -----

    对于您的用户案例,这将是一个不错的选择:

    1. 在模型中添加Date字段,并添加注释@Index以便更快地查询。

    2. 更新/添加行并将修改日期设置为当前时间。

    3. 删除当前日期之前modifiedDate所在的对象。realm.where(MyModel.class).lessThan("modifiedDate", currentDate).findAll().clear()

    4. 注意:&#34;日期被截断,精度为一秒。为了保持32位和64位设备之间的兼容性,不能在1900-12-13之前和2038-01-19之后存储日期。&#34; 请参阅current limitations。如果您可以在很短的时间内修改表格,而且准确度不合适,请考虑使用int字段。您可以按RealmResult.max()

      获取列的最大值