在 Firebase 中复制数据的正确方法是什么?
What is the right way to duplicate data in Firebase?
我最近一直在重构我的代码以尝试对我的 Firebase 数据库进行非规范化。我知道一些重复和冗余是必要的,但我发现很难确定正确的重复级别。
例如,在我的项目中,我有 outfits
和 items
,其中一个 outfit
可能有很多 items
标记。
目前,我有这个设置:
outfits
outfitId
outfitName
outfitDescription
items
itemId
itemName
itemDescription
itemBrand
itemsByOutfit
outfitId
itemId
itemName
itemDescription
itemBrand
itemId
itemName
itemDescription
itemBrand
在UI中,我经常需要获取outfit
个对象的列表,以及标记的项目。 itemsByOutfit
在这个意义上是一个方便的索引 - 因为我可以一次获得名称、描述和品牌。
但是当涉及到重命名项目或更改描述时,我也必须展开更新。
将 itemsByOutfit
限制为仅 itemId
值会更好吗?像这样:
itemsByOutfit
itemId: true
itemId: true
这似乎更易于维护,但在获取时需要更多工作。我大概必须使用所有 itemId
值进行第二次查询以获取名称、品牌等
我还有另一个索引 - itemsByBrand
- 它遵循类似的复制模式。所有数据均按品牌复制和组织 - 例如:
itemsByBrand
Nike
itemId
itemName
itemDescription
itemBrand
如果有任何想法或最佳实践可以帮助我构建更具可扩展性的解决方案,我将不胜感激。谢谢!
我的观点是您只持有一次商品数据(名称、描述、品牌)。在项目节点中。所有其他 itemby'x' 列表都是 itemId:bool 列表,您阅读这些列表以获取必要的项目,然后循环访问返回的列表以检索项目数据。应该不会有太大的性能开销,并且涉及的数据量很小。
我最近一直在重构我的代码以尝试对我的 Firebase 数据库进行非规范化。我知道一些重复和冗余是必要的,但我发现很难确定正确的重复级别。
例如,在我的项目中,我有 outfits
和 items
,其中一个 outfit
可能有很多 items
标记。
目前,我有这个设置:
outfits
outfitId
outfitName
outfitDescription
items
itemId
itemName
itemDescription
itemBrand
itemsByOutfit
outfitId
itemId
itemName
itemDescription
itemBrand
itemId
itemName
itemDescription
itemBrand
在UI中,我经常需要获取outfit
个对象的列表,以及标记的项目。 itemsByOutfit
在这个意义上是一个方便的索引 - 因为我可以一次获得名称、描述和品牌。
但是当涉及到重命名项目或更改描述时,我也必须展开更新。
将 itemsByOutfit
限制为仅 itemId
值会更好吗?像这样:
itemsByOutfit
itemId: true
itemId: true
这似乎更易于维护,但在获取时需要更多工作。我大概必须使用所有 itemId
值进行第二次查询以获取名称、品牌等
我还有另一个索引 - itemsByBrand
- 它遵循类似的复制模式。所有数据均按品牌复制和组织 - 例如:
itemsByBrand
Nike
itemId
itemName
itemDescription
itemBrand
如果有任何想法或最佳实践可以帮助我构建更具可扩展性的解决方案,我将不胜感激。谢谢!
我的观点是您只持有一次商品数据(名称、描述、品牌)。在项目节点中。所有其他 itemby'x' 列表都是 itemId:bool 列表,您阅读这些列表以获取必要的项目,然后循环访问返回的列表以检索项目数据。应该不会有太大的性能开销,并且涉及的数据量很小。