Angular Firebase:减少大型集合的读取次数

Angular Firebase:减少大型集合的读取次数,angular,firebase,google-cloud-firestore,Angular,Firebase,Google Cloud Firestore,经过大量的搜索,我在阅读firebase collections时发现了很多“不该做的事”(主要的例子是3万美元账单事件),但是我正在努力找到一个适合我们问题的解决方案 我们的网站上有产品目录。目录由名为“产品”的firestore集合填充,JSON结构如下: "products"{ "productId"{ "name": "price": "brand": ... } } 为了加载集合,我使用以下命令: this.products

经过大量的搜索,我在阅读firebase collections时发现了很多“不该做的事”(主要的例子是3万美元账单事件),但是我正在努力找到一个适合我们问题的解决方案

我们的网站上有产品目录。目录由名为“产品”的firestore集合填充,JSON结构如下:

"products"{
   "productId"{
      "name":
      "price":
      "brand":
       ...
  }
}
为了加载集合,我使用以下命令:

this.products = this.db.collection('products').valueChanges({idField: 'productID'});
在其高峰期,我们预计该系列将包含多达2000种产品。我担心的是,随着网站规模的扩大,这将变得极其昂贵。我注意到,每次导航到“目录”页面时,它都会再次加载收藏。因此,举一个并非不可想象的例子,如果页面在一天内加载5000次并加载完整的集合,就像它当前所做的那样,它将导致10000000个文档读取(至少)

我确信一定有更好的方法来做到这一点,然而,我似乎无法破解它

对于如何更好地解决这一问题并降低成本,我们非常感谢您提供的任何建议

你可以:

  • 使用实现您自己的本地缓存,并根据您的喜好进行处理
  • 使用启用并将查询定向到缓存
  • 用于避免一次加载整个结果集

  • 你主页的普通访问者会看到多少产品?假设您在折叠上方显示5-10个产品,因此在它们必须滚动之前。如果50%的访问者直接离开页面(对于这种所谓的反弹来说,这是一个相当乐观的值),您只需要每天加载5000次访问*10个产品=50000次阅读就可以满足一半的访问者

    而50%的访问者留在你的网站上看更多的内容,实际上是那些值得加载更多数据的人。但我还是会考虑优化< /P> 加载所有2000个产品对绝大多数访问者来说可能是浪费,这就是Doug建议对数据进行分页的原因(或者现在更常见的是:使用无限滚动视图加载数据)

    一个更有效的替代方法是将最初的10个产品存储到一个文档中,基本上存储预聚合的内容。如果你这样做,你只需要每个访问者阅读一个文档就可以得到最初的产品。然后您可以像以前一样按需加载其余的文档

    您可以进一步采用这种方法,预先聚合多种类型的内容,例如每个类别最受欢迎的产品、特定产品的相关产品等。虽然这些步骤中的每一步都会使生成内容变得更加棘手,但如果有更多的访问者,您很容易获得回报


    要了解这一点以及使用Cloud Firestore时的许多其他注意事项,我推荐优秀的视频系列。

    感谢您的建议-我将做一些研究,看看如何实现它们!谢谢-我一定会看看这部视频系列