我正在创建一个带有本机响应的事件应用。我只是想寻求一些建议,以更好地在Firestore中构建数据模型,从而获得更好的性能和可扩展性。 我有2个集合“事件和用户”。
用户创建一个进入Event集合的事件,然后在我的应用程序中,用户可以转到主页并查看来自事件集合的事件列表。 我还希望在应用程序中有第二个页面,即“用户个人资料”页面,用户可以在其中查看自己的事件列表,进行更新和删除。 我的问题是哪个更好:
我认为选项1可能更好,只是将对文档的引用存储在数组中,所以我没有事件的重复项,并且如果用户必须更新事件,则只需写入1次是根据事件集合中的实际事件进行的。
将来该事件可能会涉及更多字段,例如注释字段等,因此我觉得只需要选择选项1,我就不必继续做双重工作,尽管我可能不得不读两次书,即读取用户/用户1->(然后数组)事件:[事件:{dockey}],然后使用该键在事件集合中获取实际的事件文档。
感谢您的任何反馈和建议
答案 0 :(得分:2)
当您需要在这两个选项之间进行选择时,没有简单的是非题。数据复制是快速读取的关键,这不仅在Fireabase实时数据库或Cloud Firestore中,而且在一般情况下都是如此。每当您将相同数据添加到其他位置时,您都在复制数据以提高读取速度。不幸的是,作为回报,您拥有更复杂的更新和更高的存储/内存使用率。但您需要注意,在Firebase实时数据库中,额外的调用并不昂贵,在Firestore中则是昂贵的。对于您来说,最佳的复制数据量是额外的数据库调用量,具体取决于您的需求以及您是否愿意放弃“单一定义点思维方式”,这也可以称为非常主观的。
在完成了一些Firebase项目之后,我发现如果我复制数据,我的阅读代码将大大简化。但是,当然,编写代码会同时变得更加复杂。两者之间的权衡需要决定了应用程序的最佳解决方案。
也请查看我从此 post 中获得的答案,其中我详细介绍了Firestore中的collections
,maps
和arrays