Android 有没有办法对Firebase中的只读对象进行版本设置?
我正在开发一个跨平台的应用程序:web、android和iOS。我有两个对象用于指定一些常量,比如有效状态。例如:Android 有没有办法对Firebase中的只读对象进行版本设置?,android,firebase,firebase-realtime-database,nosql,Android,Firebase,Firebase Realtime Database,Nosql,我正在开发一个跨平台的应用程序:web、android和iOS。我有两个对象用于指定一些常量,比如有效状态。例如: { "states": { "VALID": 0, "INVALID": 1 } } 现在我已经发布了使用这个对象的客户机,他们已经在野外了,但是我意识到这个对象不能满足我的需要,它需要改变。现在,我创建了一个版本化对象,如下所示: { "states2": { "VALID": {
{
"states": {
"VALID": 0,
"INVALID": 1
}
}
现在我已经发布了使用这个对象的客户机,他们已经在野外了,但是我意识到这个对象不能满足我的需要,它需要改变。现在,我创建了一个版本化对象,如下所示:
{
"states2": {
"VALID": {
"id": 0,
"name": "Valid entry"
},
"INVALID": {
"id": 1,
"name": "Invalid entry"
}
}
现在的计划是离开states对象,在较新的客户机中只从states2获取额外的数据,但是留下这种遗留问题似乎真的很糟糕。关于这个问题:
1) 是否有办法对Firebase提供的对象进行版本设置
或
2) 我只是在使用Firebase,而不是为了使用它吗
或
3) 有没有更好的方法在Firebase中构造这种只读数据
- 您所做的是解决这个问题最常用的方法:创建一个具有新结构的辅助数据结构。如果结构是可写的,这意味着您必须协调写入以更新这两个位置。由于您无法更新旧的应用程序,因此您必须使用非客户端脚本来完成部分更新。是的,很痛苦
- 您有时会看到的一种替代方法是强制升级,这意味着您在数据库中保留一个顶级的
,客户端检查is是否可以读/写该版本。如果没有,它只是中止当前架构版本
鉴于这是只读(可能是管理)数据,我建议为您的应用程序设置一个管理仪表板。当您在该仪表板中添加新的
状态时,它可以将其写入两个位置。假设您有一个旧的应用程序v1.0和一个新的应用程序v2.0,您有50个客户端按照v1.0读/写,50个客户端按照v2.0读/写
唯一的问题是,这些客户群是否相互交互
如果没有,他们对自己的应用程序很满意
如果是,v2.0客户端必须从v1.0字段读取数据并将其升级到v2.0字段(默认或使用v2.0客户端的附加数据),然后在写入v1.0字段的同时再写入其他v2.0字段
该理论适用于一个客户端与多个其他版本客户端交互
由于firebase是无模式的,所以可以让同一类别的两个节点包含不同数量的字段,而不会出现问题。因此,使用firebase时,只需注意不要在版本之间更改字段的含义。在较新版本中,始终保持旧的读/写操作不变,对于新数据,始终创建新字段
在您产品的所有更高版本中,版本运行所需的最小字段必须始终存在。有没有办法在firebase现有数据库中添加DB child而不影响现有用户?