从Realm迁移到Sqlite

时间:2019-04-11 06:01:54

标签: android realm android-room

我使用Realm启动了我的应用,因为这似乎是当时最方便的数据存储方式。

此刻,对于我来说,这个领域有两个大弊端:

  • APK大小:领域库为APK大小增加了很多。我目前正在使用App Bundles来最大程度地减少影响,但是与SQLite相比,这是一个问题(我的用例非常简单,不需要高级功能)
  • 与App捆绑包的兼容性:当我开始使用App捆绑包克服上述问题时,又出现了另一朵玫瑰,至今仍然存在:here

因此,我想回到普通的SQLite(也许使用Room)。

事情是,为了“迁移”,我需要在相当长的一段时间内同时使用两者,才能迁移所有现有用户。

计划为:

  1. Room

  2. 创建数据结构
  3. 具有升级机制,该机制将所有Realm表填满Room

  4. 仅在应用程序中使用Room数据结构

  5. 发布应用版本X

  6. 有时会从应用程序中删除Realm(仅当99%的用户使用应用程序X版时,才能完成此操作)

我想没有其他办法了,或者有人已经面临过同样的问题吗?

1 个答案:

答案 0 :(得分:0)

我现在处在相同的情况。

当前想法

我想说,您执行第1-5步的计划是从 Realm到SQLite 应用内/本地数据库迁移。此外,它还考虑了用户采用正确版本以使数据库迁移对用户有效(100%)的所有注意事项。

我正在考虑另一种选择。 网络服务。 (请耐心等待,因为我尚未实施此解决方案,我仍在考虑/计划阶段。)

如果预算允许,如何设置Web服务来代表应用程序进行数据库迁移?

在线数据库迁移

遵循以下原则:

  1. 更新您的应用程序使其仅在 SQLite 上运行(删除有关 Realm 的所有内容);
  2. 更新后的应用程序在启动时会检测它是否具有 SQLite 数据库;
  3. 如果未检测到 SQLite 数据库,则应用会检查 Realm 数据库;
  4. 如果找到 Realm 数据库文件,该文件将发送到您的Web服务以迁移到 SQLite ,然后发送回应用程序并进行相应安装;
  5. 从新更新的 SQLite 数据库文件恢复;
  6. 如果未找到 SQLite Realm 数据库文件,请创建 SQLite ,因为 Realm 根本不存在; < / li>

注意事项

  • 数据传输,托管和处理成本(无服务器/ lambda服务是一种选择?微服务?);
  • Web服务端的并发(有多少用户同时需要此服务?);
  • 用户的隐私(用户的隐私,服务条款,隐私政策是否受到破坏?)
  • 传输和存储的安全性(如果您计划进行任何回滚计划);
  • 领域数据库是否已加密?如何处理?
  • 我们将在线数据库迁移Web服务保持多长时间?
  • 如果出现问题,我们是否将 Realm 文件保留在设备上?
  • 此任务是否有特定的日志记录要求?
  • 我们需要遵守任何标准或惯例吗?

结语

如前所述,我还没有实现这种解决方案,所以我还不能提供有关实用性的见解(如果我遵循这一道路,我将更新此答案)。

我觉得这种在线数据库迁移方法的主要优点是,我们从数据库迁移中卸载了应用程序;另一方面,它为已经具有风险的任务增加了相当大的复杂性。

最后,我现在可以想到的另一种可能性是完全在线, Firebase-ish 或可通过Web API访问数据库。但我相信这条路与我根据您的问题得出的情况不符。

也希望能收到社区的来信。

好运。