商店的 Firestore 数据结构

Firestore Data Structure for a Shop

我一直在建立一个销售旧材料的网站,我曾经有如下的 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

为了加载主页的所有 post,我曾经访问 AllPosts 集合,然后获取 allPosts 文档以在 firestore 上一次读取所有 post。如果用户想要查看一个商店的资料,我访问帖子集合以拥有所有用户 posts.

然后我意识到文档有 1MB 的限制,所以我不能使用一个文档来存储更大范围内的所有 post。因此,我必须使用一个名为 posts 的集合,每个 post 呈现一个文档。鉴于每次用户打开应用程序时都需要加载所有 post,因此不会导致读取次数过多并可能超过 firestore 读取限制。我是不是遗漏了一些东西,或者这是否尽可能高效

对于您经常只需要数据子集的情况,您所做的是相当地道的。

您可以考虑将 AllPosts 信息分片到多个文档,但需要为这些文档提供可预测的命名方案。例如,您可以将文档 ID 基于其中 post 的日期(可能还有时间),每天(或其他相关时间范围)创建一个索引文档。

您还可以考虑将 AllPosts 信息存储在 Firebase 的实时数据库中,它更适合此类较小的信息 - 并且没有文档读取的成本开销。虽然实时数据库的带宽使用成本更高,但每个 post 的数据较少这一事实可能会抵消这一点。因此,您最终会在实时数据库中得到 AllPosts“索引”,在 Firestore 中得到单独的 post 文档。