pro*_*aea 6 android nosql firebase firebase-realtime-database
我正在开发一个跨平台的应用程序:web,android,iOS.我有几个对象旨在指定一些常量,如有效状态.例如:
{
"states": {
"VALID": 0,
"INVALID": 1
}
}
Run Code Online (Sandbox Code Playgroud)
现在我已经发布了使用这个对象的客户端,他们已经在野外,但我意识到这个对象不符合我的需求而且需要改变.现在我已经创建了一个这样的版本化对象:
{
"states2": {
"VALID": {
"id": 0,
"name": "Valid entry"
},
"INVALID": {
"id": 1,
"name": "Invalid entry"
}
}
Run Code Online (Sandbox Code Playgroud)
现在的计划是离开状态对象,只是从较新的客户端中的states2获取额外的数据,但这种遗留下来的遗留问题看起来真的很糟糕.那么问题是:
1)Firebase提供的版本对象是否有办法?
要么
2)我是否只是以一种不打算使用的方式使用Firebase?
要么
3)有没有更好的方法在Firebase中构建这种只读数据?
不,Firebase没有内置版本.
一点也不.这是我见过的客户端 - 服务器上下文中任何数据库模式升级的常见问题.无论您使用哪个数据库,在升级数据库模式时,为多个版本的客户端提供服务并不简单.
有几种常见的处理方法:
您所做的是解决此问题的最佳方法:创建具有新结构的辅助数据结构.如果结构是可写的,那意味着您必须协调写入以更新两个位置.由于您无法更新旧的应用程序,因此您必须使用非客户端脚本执行此操作.是的,这很痛苦.
您有时会看到一种替代方法是强制升级,这意味着您current-schema-version在数据库中保留顶级,客户端会检查是否可以读取/写入该版本.如果没有,它只是中止.
任何数据的最佳结构取决于您的应用程序的需求.所以我们不可能说什么是最好的.您的初始数据结构对我来说似乎很合理,但您发现它太有限了.
鉴于这是只读(可能是管理)数据,我建议为您的应用程序设置管理仪表板.state在该仪表板中添加新内容时,它可以将其写入两个位置.
| 归档时间: |
|
| 查看次数: |
587 次 |
| 最近记录: |