商店的 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 数据结构的主要内容,如果未能解决你的问题,请参考以下文章

根据 url 从 firestore 检索数据

如何从 Vuex 商店中删除 Firestore 快照侦听器

Vue、Vuex 和 Firestore:如何在前端显示检索到的 Firestore 数据并使其具有响应性?

如何在flutter的firestore中使用uid更新用户数据

在使用 firebase/firestore 服务的 Google Play 商店中发布应用程序时,我是不是需要做任何额外的工作? [关闭]

努力在 Firestore Swift 中使用 getDocuments() 进行查询