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

Kri*_*pta 13 architecture firebase firebase-realtime-database

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

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

性能相关问题示例:

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

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

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

新功能问题示例:

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

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

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

传统方案:

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

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

mcd*_*mcd 4

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

回答你的问题: 我会开发一个不同的应用程序,将其添加到同一个 Firebase 项目中,然后让该应用程序将所有旧数据转换为新数据模型。因此,您可以在发布新版本后执行一次此操作,并将旧用户数据转换为新数据模型,一切顺利。databaseVersion您还可以为每个对象拥有一个属性。

为了防止将来出现问题,您可以app-version在您的Firebase Realtime Database. 在每次发布之前,应用程序都会检查是否有更新的版本。如果没有,用户可以添加帖子,但如果有更新的版本,您可以通过以下方式显示消息/警报UIAlertController