android - 复制到 Realm 或更新和删除

标签 android performance realm

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

但是我的文件可能会失效,我需要一些东西来删除根据请求返回的数据中没有的所有内容。我不想通过截断或手动删除来执行此操作,因为性能很重要。

想法1

@beeender

您认为使用表的 PRIMARY_KEY 删除我不想要(或不需要)的数据怎么样?

看起来像:

  • 1°:如果数据库已填充,则获取所有主键并将其添加到 HashMap 中(或任何具有相同功能的东西)。

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

  • 3°:删除 HashMap 的所有项目在王国上。

最佳答案

也许在这种情况下内存 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 中删除整个数据(首先关闭所有实例!): Realm.deleteRealm(realmConfig);
  3. 或者只是通过普通的 java API 删除 Realm 文件。

如果您确实关心性能,您可以考虑将这些数据分离到一个 Realm 中,并使用选项 2 或 3 来删除它们。请参阅文档here通过RealmConfiguration使用不同的Realm。

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

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

  1. 向模型添加 Date 字段,并添加注释 @Index 以加快查询速度。

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

  3. 删除modifiedDate早于当前日期的对象。realm.where(MyModel.class).lessThan("modifiedDate", currentDate).findAll()。清除()

注意:“日期以一秒的精度截断。为了保持 32 位和 64 位设备之间的兼容性,不可能存储 1900 年 12 月 13 日之前和 2038 年之后的日期 - 01-19。”参见current limitations 。如果您可以在很短的时间内修改表格但精度不合适,请考虑改用 int 字段。您可以通过 RealmResult.max() 获取列的最大值

关于android - 复制到 Realm 或更新和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32211488/

相关文章:

c# - C# 真的比说 C++ 慢吗?

.net - 多核和线程感知 .Net 秒表?

ios - 新模型的架构版本更新

android - 当它的子项是列表时,使用 Set 不会删除重复项

javascript - AngularJs、Phonegap、路由器和 uiRouter

performance - TSDB 与 HBase : What to choose in long term?

swift - 由于 Realm [iOS] 中缺少 GroupBy 和 Sum,操作非常缓慢

ios - fatal error : unexpectedly found nil - number of row

java - 在 Android 的抽屉导航中创建子菜单

java - 使用导航组件多次触发 LiveData 观察者