首页 文章

更改firebase数据模型(多个应用程序版本正在 生产环境 中)

提问于
浏览
13

在 生产环境 中有多个版本的iOS应用程序时,更改 Firebase 数据模型的最佳方法是什么?

由于中间没有“应用程序服务器”层,因此数据库模型中的任何更改都可能会破坏旧版本的应用程序 .

Performance Related Example of the problem

在版本1.0中,我天真地保留了与“/ posts /”下的帖子相关的所有内容 . 现在在2.0版本中,我想采用Firebase的建议并添加一个'/ user-post' endpoints 来快速列出给定用户的所有帖子 .

使用iOS应用1.0版的人不会将任何数据写入'/ user-posts',因为该 endpoints 以前不存在 . 因此,使用2.0版本的人看不到使用旧版应用程序的人创建的任何帖子 .

从理论上讲,我可以在某个地方创建一个服务器来监听'/ post /'上的更改,并将它们添加到'/ user-posts'中 . 如果您有很多不同版本的应用程序,那么这似乎很难维持 .

New Feature Example of the problem

让我们在你的移动应用程序的1.0版中说你写了新帖子到'/ posts /' . 现在,在您的应用程序的2.0版本中,您将引入一个团队功能,所有帖子都需要在'/ team / team-id / posts'中 .

尚未升级到2.0版的人仍将写入'/ posts' . 使用版本2.0的用户从'/ team / team-id / posts'中读取这些帖子是不可见的 .

我意识到你可以同时保留两个 endpoints (以及基于团队ID的索引/帖子),但随着时间的推移,这似乎很难维护 .

Traditional solutions:

如果我使用的是Django或Express,我会进行数据库迁移,然后更新服务器端 endpoints 以创建博客帖子 .

这将从客户端对数据库进行更改 . 理论上,我可以使用 Firebase 为我的架构添加一个应用程序服务器层,但这不建议使用't seem like it':https://firebase.googleblog.com/2013/03/where-does-firebase-fit-in-your-app.html

1 回答

  • 3

    如果有更新,我建议您使用 Firebase Remote Config 通过 UIAlertController 或不同的屏幕显示警报 . 您可以强制用户更新到当前版本,以后您不会遇到问题,因为不能创建包含旧代码的帖子 .

    To answer your question: 我会开发一个不同的应用程序,将其添加到同一个Firebase项目中,然后让这个应用程序将所有旧数据转换为新的数据模型 . 因此,在发布新版本后,您将执行此操作一次,旧的用户数据将转换为新的数据模型,一切顺利进行 . 对于每个对象,您也可以拥有像 databaseVersion 这样的属性 .

    为了防止将来出现问题,您可以在 Firebase Realtime Database 中使用名为 app-version 的常规属性 . 在每个帖子之前,应用程序会检查是否有更新的版本 . 如果没有,用户可以添加帖子,但如果有更新版本,您可以通过 UIAlertController 显示消息/提醒

相关问题