我正在开发一个将是跨平台的应用:web,android,ios。我有几个旨在指定某些常数的对象,例如有效状态。例如:
{
"states": {
"VALID": 0,
"INVALID": 1
}
}
现在,我已经发布了使用此对象的客户,它们在野外,但是我意识到这个对象不满足我的需求,需要改变。现在,我已经创建了这样的版本的对象:
{
"states2": {
"VALID": {
"id": 0,
"name": "Valid entry"
},
"INVALID": {
"id": 1,
"name": "Invalid entry"
}
}
现在,计划是让各州的对象离开,并从较新客户中获取eTate2的额外数据,但这似乎很糟糕。因此,问题:
1)是否有一种方法来使用Firebase提供的对象?
或
2)我只是以某种方式使用firebase吗?
或
3)是否有更好的方法在Firebase中构建这种仅阅读数据?
-
否,Firebase没有内置版本。
-
根本不是。这是我见过的客户端服务器上下文中任何数据库架构升级的常见问题。在升级数据库架构时,为多种版本的客户端提供餐饮并不简单,无论您使用哪个数据库。
有几种常见的处理方法:
-
您所做的是解决此问题的最常见方法:创建具有新结构的辅助数据结构。如果结构是可以写的,则意味着您必须调和以更新两个位置的写作。而且由于您无法更新旧的应用程序,因此您必须使用非客户脚本进行部分操作。是的,这很痛苦。
-
您有时看到的一种替代方案是A 强制升级,这意味着您将顶级
current-schema-version
保留在数据库中,并且客户端检查是否可以读取/写入该版本。如果没有,它只是中止。
- 任何数据的最佳结构取决于应用程序的需求。因此,我们不可能说什么是最好的。您的最初数据结构对我来说似乎很合理,但是您发现它太限制了。
鉴于这是只读(可能是管理)数据,我建议您为您的应用程序设置管理仪表板。当您在该仪表板中添加新的state
时,它可以将其写入两个地方。
假设您有一个旧的应用程序v1.0和一个新的v2.0,则根据v1.0和50个客户端的读取/写作和50个客户端,并且根据v2读取/写作。0。
唯一的问题是那些客户群是否相互作用?
如果不,他们对自己的应用感到满意。
如果是,v2.0客户端必须从v1.0字段读取数据并将其升级到v2.0字段(默认或使用v2.0客户端的其他数据),并且在写入编写v1.0字段时,然后写入编写其他v2.0字段。
该理论适用于一个客户与多个其他版本客户端进行交互。
由于Firebase是示意性的,因此您可以有两个类别的节点,其中包含不同数量的字段,没有问题。因此,使用Firebase,您只应该注意您不会更改版本之间字段的含义。在较新的版本中,始终保持旧的读/写入,并且对于新数据,始终会创建新字段。
函数版本的最低必需字段必须始终存在于您的产品的所有较高版本中。