商店的 Firestore 数据结构
Posted
技术标签:
【中文标题】商店的 Firestore 数据结构【英文标题】:Firestore Data Structure for a Shop 【发布时间】:2021-10-23 07:12:09 【问题描述】:我一直在建立一个销售二手材料的网站,我曾经有我的 Firestore 数据库,如下所示
Posts(collection)
┣ userID1(document)
┃ ┣ postID1(collection)
┃ ┃ ┗ timestamp: 2018/09/21/22:22(field)
┃ ┣ postID2
┃ ┗ postID3
┣ userID2
┣ userID3
AllPosts(collection)
┣ allPosts(document)
┃ ┣ postID1(collection)
┃ ┃ ┗ timestamp: 2018/09/21/22:22(field)
┃ ┣ postID2
┃ ┗ postID3
为了加载主页的所有帖子,我曾经访问 AllPosts 集合,然后获取 allPosts 文档以将所有帖子作为一个在 firestore 上阅读。如果用户想查看一个商店的资料,我访问 Posts 集合以获取所有用户的帖子。
然后我意识到文档有 1MB 的限制,因此我不能使用一个文档来更大范围地存储所有帖子。所以,我必须使用一个名为帖子的集合,每个帖子都呈现一个文档。鉴于每次用户打开应用程序时都需要加载所有帖子,因此不会导致读取次数过多并可能超过 firestore 读取限制。我是否遗漏了什么,或者这是否有效
【问题讨论】:
【参考方案1】:对于您经常只需要数据子集的情况,您正在做的事情是相当惯用的。
您可以考虑将AllPosts
信息分片到多个文档中,但需要一个可预测的命名方案。例如,您可以将文档 ID 基于其中帖子的日期(可能还有时间),每天(或其他相关时间范围)创建一个索引文档。
您还可以考虑将 AllPosts
信息存储在 Firebase 的实时数据库中,该数据库更适合存储此类较小的信息,并且不会产生文档读取的成本开销。虽然实时数据库在使用带宽方面成本更高,但这很可能会被您每个帖子的数据较少的事实所抵消。因此,您最终会在实时数据库中获得 AllPosts
“索引”,并在 Firestore 中获得各个发布文档。
【讨论】:
以上是关于商店的 Firestore 数据结构的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Vuex 商店中删除 Firestore 快照侦听器
Vue、Vuex 和 Firestore:如何在前端显示检索到的 Firestore 数据并使其具有响应性?
如何在flutter的firestore中使用uid更新用户数据
在使用 firebase/firestore 服务的 Google Play 商店中发布应用程序时,我是不是需要做任何额外的工作? [关闭]